Avatar billede kingguro Nybegynder
28. maj 2001 - 13:18 Der er 19 kommentarer og
1 løsning

Optæl dir og filer?

Hvordan kan jeg lave så den starter i roden (C:) og derfra optæller antal filer og antal direktorier herunder?
Avatar billede pellelil Nybegynder
28. maj 2001 - 13:20 #1
Brug FindFirst/FindNext. Borrisholt har (så vidt jeg husker) nogle eksempler på hans hjemmeside: www.borrisholt.com
Avatar billede martinlind Nybegynder
28. maj 2001 - 13:22 #2
Jeg har tidligere vist en Scandir function, så den burde du kunne finde her et sted.

/Martin
Avatar billede borrisholt Novice
28. maj 2001 - 13:23 #3
Der er kun den hårde måde på det at skrive dig en algoritme der løber der hele i gennem og tæller dem efter hånden som du løber på dem ....


Men fortvivl ikke selve algoritmem kan du hugger fra mig. Du gå på http://borrisholt.com og downloader eksemplet ThreadSearch.

Den klasse du finder i det eksempel sætter du bare til at søge.. Også i dit file found event tæller du op alt efter hvad dne har fundet.

Jens B http://fotx.net/borrisholt
Avatar billede pellelil Nybegynder
28. maj 2001 - 13:26 #4
Borrisholt> Det er sgu da en HEST du har der på siden - Jeg er rørt  ;-)
Avatar billede kingguro Nybegynder
28. maj 2001 - 13:26 #5
Det lyder godt Borris...... Jeg ser lige på det
Avatar billede borrisholt Novice
28. maj 2001 - 13:27 #6
pellelil >> Hvad skulle jeg ellers stoppe på ?

Jens B
Avatar billede martinlind Nybegynder
28. maj 2001 - 13:27 #7
Noget i denne stil kan :

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[1] <> \'.\' ) and ( S.Name[1] <> \'..\' ) then
      begin
        // Do the stoff here
        if OkToAdd(IncludeTrailingBackslash(CPath)+S.FindData.cFileName) then
          L.Add(IncludeTrailingBackslash(CPath)+S.FindData.cFileName);
      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[1] <> \'.\' ) and ( S.Name[1] <> \'..\' ) then
      begin
        ScanFiles(IncludeTrailingBackslash(CPath)+S.Name,Subs,L);
        ChDir(\'..\');
      end;
  until FindNext(S) <> 0;
  FindClose(S);
end;


Der er hvad du skal bruge.

/Martin
Avatar billede martinlind Nybegynder
28. maj 2001 - 13:28 #8
Du fjerner bare if OkToAdd linen så skulle den virke.
Avatar billede kingguro Nybegynder
28. maj 2001 - 13:31 #9
Ser også godt ud Martinlind.... Jeg må lige se lide på jeres eksempler
Avatar billede kingguro Nybegynder
28. maj 2001 - 13:35 #10
Martinlind >> Hvad skal jeg skrive når jeg skal kalde proceduren? Hvad skal der sendes i APath, subs og L?
Avatar billede ziron Nybegynder
28. maj 2001 - 13:36 #11
procedure TForm1.ScanFiles( const aPath,aMask : String; Subs : Boolean );
VAR
  S  : TSearchRec;
  CPath : String;
  hFile, size: integer;
begin
  ChDir(aPath);
  GetDir(0,CPath);

  if FindFirst(IncludeTrailingBackslash(CPath)+aMask,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[1] <> \'.\' ) and ( S.Name[1] <> \'..\' ) then
      begin
        Label5.Caption := IntToStr(TCount);
        Label6.Caption := IntToStr(DCount);
        Inc(TCount);
        Form1.Refresh;
      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[1] <> \'.\' ) and ( S.Name[1] <> \'..\' ) then
      begin
        ScanFiles(IncludeTrailingBackslash(CPath)+S.Name,aMask,Subs);
        Inc(DCount);
        Form1.Refresh;
        ChDir(\'..\');
      end;
  until FindNext(S) <> 0;
  FindClose(S);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ScanFiles(\'c:\\\',\'*.*\',TRUE);
end;

/ZIRON
Avatar billede borrisholt Novice
28. maj 2001 - 13:41 #12
på adressen
http://borrisholt.com/eksperten/kingguro.zip

finder du et færdig eksempel;

Jens B
Avatar billede martinlind Nybegynder
28. maj 2001 - 13:43 #13
Ziron >> Nå, det var dig der fik den sidst, kunne ikke lige huske hvem det var *S*
Avatar billede martinlind Nybegynder
28. maj 2001 - 13:44 #14

ScanFiles(\'c:\\\',\'*.*\',TRUE);
Avatar billede martinlind Nybegynder
28. maj 2001 - 13:47 #15
Sorry, det var ikke rigtigt

VAR
  L : TStrings;

begin
  L := TStringList.Create; 
  ScanFiles(\'C:\\\',TRUE, L);
//  L.Count er lig med antalet af filer, L indeholder en liste med alle filnavne

end;


/Martin
Avatar billede ziron Nybegynder
28. maj 2001 - 13:47 #16
martinlind >> nej ikke helt det var snowball menere jeg... jeg kunne bare huske det havde der og så lige skrive lidt om :-)

/ZIRON
Avatar billede kingguro Nybegynder
28. maj 2001 - 13:48 #17
Undskyld Martin. Jeg ville have give dig nogle point.... Kom tal at acceptere ZIRON\'s uden at give jer begge..... En anden gang.... Men tak for hjælpen
Avatar billede martinlind Nybegynder
28. maj 2001 - 13:49 #18
Ja Ja, men de er din velundt, Ziron *S*

/Martin
Avatar billede borrisholt Novice
28. maj 2001 - 13:49 #19
martinlind>> Tillad mig at komme mig med den sædvanlige indvæning for at blokere hele dit operativ system, blot for at tilgå din HD.

Jens B
Avatar billede martinlind Nybegynder
28. maj 2001 - 13:51 #20
Jb >> Jeg bliver jo nødt til at protestere, det er altså at skyde gråspurge med kanoner, og lave en ny ståd hvergang man skal foretage sig noget.

Min rutine scaner ca. 20000 filer på 1 min. så det er altså ikke noget med at maskinen hænger i flere timer.
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