Avatar billede jackass- Nybegynder
18. september 2007 - 22:23 Der er 4 kommentarer og
1 løsning

Dirs og filer startende med punktum?

Hej, jeg bruger nedenstående funktion til rekusivt at finde størrelsen af et dir (kunne være S:\) inkl. subdirs og det fungerer som sådan fint nok..

function GetDirSize(dir: string; subdir: Boolean): Int64;
var
  rec:    TSearchRec;
  found:  Integer;
begin
  Result := 0;
  if dir[Length(dir)] <> '\' then dir := dir + '\';
  found := FindFirst(dir + '*.*', faAnyFile, rec);
  while found = 0 do
  begin
    Inc(Result, rec.FindData.nFileSizeHigh shl 32 or rec.FindData.nFileSizeLow); 
    if (rec.Attr and faDirectory > 0) and (rec.Name[1] <> '.') and (subdir = True) then
      Inc(Result, GetDirSize(dir + rec.Name, True));
    found := FindNext(rec);
  end;
  FindClose(rec);
end;

Men! I dette specifikke tilfælde er S:\ et mounted netværksdrev (Samba sharing på en Linux server) hvor der også er filer og/eller dirs som starter med ".". Det kunne være et dir der hedder ".fisk" eller noget - og her tæller funktionen jo ikke.

Jeg har prøvet blot at fjerne "and (rec.Name[1] <> '.')" fra if-sætningen, men det _virker_ som om at funktionen så går i selvsving. Efter 5 minutter (normalt tager det blot et par sekunder) har den endnu ikke returneret et resultat.

Er det Windows der laver ballade? Skal det gøres på en bestemt anden måde?

Håber nogen kan hjælpe :/
Avatar billede erikjacobsen Ekspert
18. september 2007 - 22:31 #1
Spring over hvis rec.Name er '.' eller '..'
Avatar billede jackass- Nybegynder
18. september 2007 - 22:38 #2
Ja opdagede lige at det spassede med Name[1], så rettede det til:

if (rec.Attr and faDirectory > 0) and (rec.Name <> '.') and (rec.Name <> '..') and (subdir = True) then

Og så virker det. Men du nåede jo at svare, så smider du et svar, så er der point :)
Avatar billede kroning Nybegynder
18. september 2007 - 22:39 #3
if (rec.Attr and faDirectory > 0) and (rec.Name<>'.') and (rec.Name<>'..') and (subdir = True) then
Avatar billede erikjacobsen Ekspert
18. september 2007 - 22:45 #4
Jeg samler slet ikke på point, tak.
Avatar billede jackass- Nybegynder
18. september 2007 - 22:53 #5
Ok, men tak for indsatsen alligevel :)
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