29. august 2001 - 20:32Der er
6 kommentarer og 1 løsning
Problem - søgning af fil(er)
Jeg har en komponent til søgning af filer. Og jeg har en liste over alle de fil typer der skal scannes og slettes. når programmet finder en fil der passer, så skal den slette den, det er også ment nok. Men problemmet at programmet læser Fil-listen for hurtig og derved kan den komponenten ikke nå at blive færdig. Den komponent jeg har, kan kun scan for en fil-type ad gangen. ( Fx *.mp3 ) men ikke ( *.mp3;*.1234 ).
hvordan kan man lave noget kode til at programmet ikke læser liste-filen før der scanning er færdig?
AI bliver først for alvor en del af arbejdet, når teknologien integreres i den måde, vi arbejder på. At have adgang til AI betyder ikke nødvendigvis, at medarbejderne er klar til at bruge den.
du kan lave et event der kaldes når komponenten er færdig. Handler koden til eventet læser så den næste filtype i listen, og sætter en ny søgning i gang
Drop din Comp. og bruge denne kode, du udvider bare OkToAddFile med de ext. du vil finde
---------- function OkToAddFile( aFileName : String ) : Boolean; begin // Check File Ext. Her Result := Pos(\'.~\',ExtractFileExt(aFileName)) <> 0; end;
procedure TForm1.ScanFiles( const aPath : String; Subs : Boolean; const L : TStrings ); VAR S : TSearchRec; CPath : String; begin ChDir(aPath); GetDir(0,CPath);
if FindFirst(IncludeTrailingBackslash(CPath)+\'*.*\',faANYFILE,S) = 0 then repeat if ( S.Attr and faSysFile = 0 ) and ( S.Attr and faDIRECTORY = 0 ) and ( S.Attr and faVolumeID = 0 ) and ( S.Name <> \'.\' ) and ( S.Name <> \'..\' ) then begin // Do the stoff here if OkToAddFile(S.FindData.cFileName) then L.AddObject(IncludeTrailingBackslash(CPath)+S.FindData.cFileName,TObject(S.Size)); end; until FindNext(S) <> 0; FindClose(S);
if Subs and ( FindFirst(\'*.*\',faDIRECTORY,S) = 0 ) then repeat if ( S.Attr and faDIRECTORY <> 0 ) and ( S.Name <> \'.\' ) and ( S.Name <> \'..\' ) then begin ScanFiles(IncludeTrailingBackslash(CPath)+S.Name,Subs,L); ChDir(\'..\'); end; until FindNext(S) <> 0; FindClose(S); end;
procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Clear; ScanFiles(\'E:\\\',TRUE,Memo1.Lines); end;
jeg har fundet ud af det. Men jeg kunne få martinlind\'s kode til at virke. Men han får nu point fordi koden kunne give mig inspiration.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.