Avatar billede f2f4 Novice
03. maj 2004 - 17:55 Der er 7 kommentarer og
1 løsning

Dir-list og katalog-size

Er der mon nogle der kan give mig et eksempel på hvordan man lige laver en simpel dir-list men angivelse af dir-size for et bestemt drev?

Så man kan få overblik over hvor der svines med diskpladsen!

Jeg sidder med en gammel Win32 API bog og kan ikke lige finde de rette funktionskald!

Tak for evt. hjælp

/Morten
Avatar billede hrc Mester
03. maj 2004 - 18:56 #1
Aarrh. Det er træls at Ekspertens søgefunktioner er lidt dårlige for der findes flere eksempler her under Delphisiden. Borrisholt har også lavet en fin klasse der melder tilbage om der sker ændringer i kataloget.

Det lugter lidt af fisk, men det som du specielt har brug for er et rekursivt gennemløb af de enkelte kataloget, med en angivelse af pladsforbruget. Har smidt en rekursiv rutine et eller andet sted, men kan ikke huske hvor.

Alternativet er at hente mit favoritprogram (og omtrent det eneste jeg har betalt for): Servant Salamander fra www.altap.cz. Vælger man v. 3'eren så kan man trykke space på et katalog og så finder den forbrugt plads derunder.
Avatar billede nca Juniormester
03. maj 2004 - 19:57 #2
Mit favoritprogram er TresizePro til 35$.
Trialversion kan hentes her:
http://www.snapfiles.com/get/treesizepro.html
Avatar billede f2f4 Novice
04. maj 2004 - 09:03 #3
nca: det ser smart ud! Tak.

Alle: Men er der nogle der kan give min et par funktionskald for at løse problemet selv programatisk. Undskyld hvis det står andre steder som 'hrc' antyder, - men jeg har ikke lige kunnet finde det.
Avatar billede hrc Mester
04. maj 2004 - 09:54 #4
Ryet om min sarkastiske tunge overhaler mig. Det var slet ikke ment sarkastisk eller noget. Jeg kan sgu ikke finde det selv - det er desværre ikke let på Eksperten. Ligeså snart tingene når "besvaret" tilstand, så forsvinder det nærmest i et sort hul.
Avatar billede f2f4 Novice
06. maj 2004 - 08:09 #5
OK (-;
Avatar billede nop Nybegynder
25. maj 2004 - 12:26 #6
procedure deleteWildchart(pn: string; wc: string);
    var
        sr:    TsearchRec;
        attr:  integer;
    begin
        attr:=faAnyFile;
        if FindFirst(pn+wc,attr,sr)=0 then begin
            repeat
                if (sr.Attr and attr) = sr.Attr then begin
                    deleteFile(pn+sr.Name);
                end;
            until FindNext(sr)<>0;
            FindClose(sr);
        end;
    end; //delete wildchart

Den her kode løber kun én mappe igennem (den man angiver) men det er vidst ingen sag at lade den kalde sig selv hvergang den finder en sub-mappe - rekursivt.
Du skal selvfølgelig ikke slette filen men tage dens størrelse fra sr structuren.
Undskyld hvis det ikke er præcis det du ønsker men det kan være en start.
--nop
Avatar billede nop Nybegynder
25. maj 2004 - 12:27 #7
ps: pn (pathname) skal enden på "\" eller lav koden om.
Avatar billede nop Nybegynder
26. juli 2004 - 11:50 #8
Tak for pointene, min løsning er som følger:

function getFolderSize(pn: string): cardinal;
var
    sr:    TsearchRec;
    attr:  integer;
begin
    result:=0;
    attr:=faAnyFile;
    if FindFirst(pn+'\*.*',attr,sr)=0 then begin
        repeat
            if (sr.Attr and faDirectory) = sr.Attr then begin
                if (sr.Name<>'.') and (sr.Name<>'..') then
                    result:=result+getFolderSize(pn+'\'+sr.Name);
            end else
                if (sr.Attr and attr) = sr.Attr then
                    result:=result+sr.Size;
        until FindNext(sr)<>0;
        FindClose(sr);
    end;
end; //get folder size

--nop
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