Problem z wyszukiwaniem

0

Mam mały problem z wyszukiwaniem plików o rozszerzeniu .~ , .* , *.~ , cos.* itp.

Chodzi mi o wyszukiwanie powyższych plików razem tak jak to robi Wyszukiwarka Windowsa po każdym pliku oddziela się go "," (przecinkiem)
Robię tak:

procedure Skanuj(Dir:String);
var
SRec: TSearchRec;
res: Integer;
ec: Char;
begin
if SkanujStop=True then
Exit;
ec := ':';
if dir <> '' then ec := dir[Length(dir)];
if (ec <> ) and (ec <> ':') then dir := dir + ;
res := FindFirst(dir + (np. .~;.~*), faAnyFile and faSysFile, SRec);
while res = 0 do begin
if SkanujStop=True then
Exit;
with PlikiWyszukane.Items.Add do
begin
Caption:=dir+SRec.Name;
SubItems.Add(IntToStr(SRec.Size div 1024)+' KB');
end;
res := FindNext(SRec);
Application.ProcessMessages;
end;
FindClose(SRec);

res := FindFirst(dir + '*', faDirectory, SRec);
while res = 0 do begin
if (SRec.Attr and faDirectory <> 0)
and (SRec.Name <> '.' ) and (SRec.Name <> '..') then
Skanuj(dir + srec.Name);
res := FindNext(SRec);
end;
FindClose(SRec);
end;

0

Nie przecinkiem tylko średnikiem ;

Procedure FileSearch(const PathName, FileName : string; const InDir : boolean; Var StringList:TStringList);
Var Rec : TSearchRec;
    Path, CurFile, AllFiles : string;
    i: integer;
Begin
  Path := IncludeTrailingBackslash(PathName);
  AllFiles:=FileName;
  While AllFiles<>'' Do
  Begin
    I:=pos(';', AllFiles);
    If i=0 Then Begin
      CurFile:=Trim(AllFiles);
      AllFiles:='';
    End Else Begin
      CurFile:=Trim(Copy(AllFiles, 1, i-1));
      Delete(AllFiles, 1, i);
    End;
    If FindFirst(Path + CurFile, faAnyFile - faDirectory, Rec) = 0 Then
    Try
      Repeat
        StringList.Add(Path + Rec.name);
      Until FindNext(Rec) <> 0;
    Finally
      FindClose(Rec);
    End;
  End;
  If not InDir then Exit;
  If FindFirst(Path + '*.*', faDirectory, Rec) = 0 then
  Try
    Repeat
    If { (Rec.Attr and faDirectory) and } (Rec.name <> '.') and (Rec.name <> '..') then
    FileSearch(Path + Rec.name, FileName, True, StringList);
    Until FindNext(Rec) <> 0;
  Finally
    FindClose(Rec);
  End;
End;

0

.~ , .* , *.~ , cos.*

Taka sprawa. Cokolwiek występuje po znaku * nie ma znaczania, więc zapis "." jest równy ".", a ".~" - ".~*".

0

Otóż mylisz się:

Np. ".*" odpowiada cokolwiek.cokolwiek(pierwszy znak)+''+cokolwiek(drugi znak)

0

[<font color="blue">post zredagowany na nowo</span>]
Errare humanum est.
Po konwersacji z Szymkiem przyznaję, że się myliłem.
8-0 Przez 8 czy ile tam lat myślałem, że * zastępuje dowolny ciąg do końca i nic się za nią nie liczy - gdzieś tak wyczytałem - jak widać błędnie.

Człowiek się przez całe życie uczy...

0

Nie całkiem błędnie... Bo w niektórych wyszukiwarkach (Jeżeli się nie mylę, należała do nich wyszukiwarka w DOS-owym Norton Commanderze) ignorowały wszystko po znaku "". Więc jeśli gdzieś tak przeczytałeś (szczególnie, że było to "kiedyś"), to pewnie osoba pisząca wówczas miała rację - wyszukiwarki ignorowały wszystko po "", a teraz tak nie jest... Ale to zagmatwałem ;p, ale myślę, że zrozumiecie o co mi chodzi...

0

Szymek twój kod jest dobry,ale czy nie mogę na moim jakoś to naprawić robię tak i nic:

FindFirst(dir + (np. .~;.*), faAnyFile and faSysFile, SRec);
albo tak:
FindFirst(dir + (np. *.
,.~), faAnyFile and faSysFile, SRec);
też tak:
FindFirst(dir + (np. .~ .~*), faAnyFile and faSysFile, SRec);

Może ktoś zna sposób taki by nie popsuć mojego kodu.

0

humm otoz za tych dawnych czasow pojedynczy znak zastepowal wykrzyknik, moze sprobuj uzyc "!~*"

//Tak dawnych czasów ja nie pamiętam. Za to od zawsze znak zapytania "?" zastępował jeden znak. - m.M

1 użytkowników online, w tym zalogowanych: 0, gości: 1