Ordnergröße ermitteln ohne Rekursion

Mathias Becker

Grünschnabel
Hallo liebes Forum

Wie man schon am Titel erkennt würde dich gerne die Größe von Ordnern ermitteln ohne dies rekursiv tun zu müssen, da mir das zu langsam ist.

Gibt es überhaupt die möglichkeit dazu****


Mfg Mathias
 

sheel

I love Asm
Hi und Willkommen bei tutorials.de :)

Nein, da gibts keine Möglichkeit dazu.
Kann man auch am Windows-Explorer erkennen:
Wenn man die Eigenschaftsseite eines Ordners mit sehr vielen Dateien öffnet,
geht die Größe laufend rauf, weil erst jede Datei durchgegangen wird
und das Ganze noch nicht fertig ist.

Vllt. gibts aber bei deiner Größenermittlung eine Möglichkeit, das zu verschnellern?
Zeig doch mal, wie du es zurzeit machst.

Wenn die Schnelligkeit wirklich wichtig ist: Mit C/C++
erzielt man meistens bessere Geschwindigkeiten.

Gruß
 

Mathias Becker

Grünschnabel
Hi Sheel,

Ich programmiere in c#

hier mein Code zur Größenbestimmung
C#:
   public double GetDirectorySize(string path, bool includeSubDirectories)
        {
          double size = 0;

            if (includeSubDirectories)
            {
                try
                {
                    string[] subDirectories = Directory.GetDirectories(path);
                    foreach (string subDirectory in subDirectories)
                        size += GetDirectorySize(subDirectory, includeSubDirectories);
                   
                }
                catch {}
            }

            // get files and add size
            try
            {
                string[] fileNames = Directory.GetFiles(path);
                foreach (string fileName in fileNames)
                {
                    FileInfo fileInfo = new FileInfo(fileName);
                    size += fileInfo.Length;
                   
                }
            }
            catch {}
           
            return size;
        }
 
Zuletzt bearbeitet von einem Moderator:

Mathias Becker

Grünschnabel
Du hast eben erwähnt, dass Windows das ja auch macht, wenn man auf Eigenschaften eines Ordners zugreift. Allerdings ist Windows viel schneller wie mein Code. Gibt es vielleicht die Möglichkeit die Funktion aufzurufen die Windows benutzt um die Ordnergröße zu ermitteln?

Gruß
 

sheel

I love Asm
Das ist vermutlich in C++ geschrieben.
Kenn den Originalcode nicht, aber FindFirstFile/FindNextFile wären Anhaltspunkte.

Wenn man unbedingt will, kann man die auch noch zerlegen
und nur den Filesize-relevanten Code rauspicken...usw

Eine Funktion, die mit einem Aufruf ganz genau das macht, was du willst, kenn ich nicht.
 

Mathias Becker

Grünschnabel
Danke für die Antworten hab mein Problem gelöst ist jetzt deutlich schneller.

C#:
FileInfo[] FI = new DirectoryInfo(path).GetFiles("*.*", SearchOption.AllDirectories);
            foreach (FileInfo F1 in FI)
            {
                size += F1.Length;
            }
            return size;
 

Neue Beiträge