Avatar billede dl Nybegynder
29. august 2001 - 20:32 Der 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?
Avatar billede zardic Nybegynder
29. august 2001 - 20:50 #1
Ok efter slet tilføj denne linge
sleep (1000);

Det for den til a vent lide for den går vider

Elle slet them Tread for sig selv

//Zardic
Avatar billede nico26 Nybegynder
29. august 2001 - 21:08 #2
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
Avatar billede martinlind Nybegynder
29. august 2001 - 22:43 #3
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;

--------

/Martin
Avatar billede dl Nybegynder
30. august 2001 - 15:11 #4
IncludeTrailingBackslash(CPath)+\'*.*\'
delphi 4 melder fejl her.

ORDET: IncludeTrailingBackslash

Den hved ikke hvad det betyder.
 
Avatar billede nico26 Nybegynder
30. august 2001 - 15:28 #5
Jeg kan ikke huske om det er en standard procedure, ellers er den nem at lave selv:

procedure IncludeTrailingBackslash(var Path: string);
begin
  if Path[Length(Path)] <> \'\\\' then
    Path := Path + \'\\\';
end;
Avatar billede martinlind Nybegynder
30. august 2001 - 19:04 #6
dl >> Det er en D5 ting så du må lige lave nico22\'s rutine

/Martin
Avatar billede dl Nybegynder
30. august 2001 - 21:28 #7
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester