Autor Beitrag
DeadlyAppearance
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 113

Win 7
Delphi 2010 Arch., C# VS 2008
BeitragVerfasst: Do 14.01.10 19:13 
Einen schönen guten Abend zusammen.

Und zwar muss ich ein Programm entwickeln, welches mir von einer Festplatte alle Ordner und dessen Größe ausgibt sowie eine Liste aller Dateien.
Im zweiten Schritt möchte ich dies täglich wiederholen und ausgeben, ob sich Ordner vergrößert haben, oder neue hinzu gekommen sind.

Mein erstes Problem ist die Berechnung der Ordnergröße.
Wenn ich das ganze Rekrusive mache und via FileInfo.Length den aktuellen Inhalt zusammen addiere, so weis ich zwar wie groß mein Ordner auf der untersten Ebene ist, jedoch
muss ich erst ganz unten angekommen sein um zu wissen wie voll die ganze Platte ist.
Wie löse ich das am besten? Muss ich in einer weiteren Liste alle Verzeichnisse merken und wenn ich mich in einem Unterverzeichnis befinde dies dazu addieren, oder gibt es da andere Lösungen?

Wie speicher ich am besten diese Liste ab um diese vergleichen zu können?
Mein jetziger Ansatz ist MySQL und dann via selects jeden Tag Änderungen vergleichen.

Ziel des ganzen ist es, einfach und übersichtlich täglich sehen zu können, welche Ordner auf der Festplatte um wieviel MB größer geworden sind und welche Dateien dies verursacht haben.

_________________
Als du auf die Welt kamst, weintest du, und um dich herum freuten sich alle. Lebe so, daß, wenn du die Welt verläßt, alle weinen und du allein lächelst.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 14.01.10 21:11 
user profile iconDeadlyAppearance hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich das ganze Rekrusive mache und via FileInfo.Length den aktuellen Inhalt zusammen addiere, so weis ich zwar wie groß mein Ordner auf der untersten Ebene ist, jedoch muss ich erst ganz unten angekommen sein um zu wissen wie voll die ganze Platte ist.
Exakt :) . Deine rekursive Funktion sollte die Größe des jeweiligen Ordners zurückgeben, dann kann die aufrufende Funktion alle zusammenrechnen. Eine Liste brauchst du dafür nicht.
user profile iconDeadlyAppearance hat folgendes geschrieben Zum zitierten Posting springen:
Mein jetziger Ansatz ist MySQL und dann via selects jeden Tag Änderungen vergleichen.
Wenn du das schon am Laufen hast, gibt es wahrscheinlich wenig dagegen zu sagen.

_________________
>λ=
DeadlyAppearance Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 113

Win 7
Delphi 2010 Arch., C# VS 2008
BeitragVerfasst: Fr 15.01.10 09:07 
Dies ist mein aktueller Algo.
Ich weis damit die aktuelle Dateigröße und kann diese innerhalb eines Ordners addieren.
Aber wenn ein Ordner z.b. 4 Unterordner mit je 1MB größe hat, so weis ich nicht wie ich ausgeben soll, dass dieser 4MB hat, da das ganze ja x mal verschachtelt sein kann.
Am Ende möchte ich gerne Wissen wie groß C:\ ist, der Windowsordner usw.
Und da weis ich einfach nicht, wie ich das ganz oben zuordnen soll, wenn ich im untersten Ordner angekommen bin.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
        public static void dirSearch(string strDir, StreamWriter stream)
        {
            foreach (string strDirectory in Directory.GetDirectories(strDir))
            {
                long filesize = 0;

                try
                {
                    foreach (string strFile in Directory.GetFiles(strDirectory))
                    {
                        FileInfo fileInfo = new FileInfo(strFile);
                        filesize += fileInfo.Length;
                    }

                    dirSearch(strDirectory, stream);
                }
                catch
                {
                    continue;
                }
            }
        }

_________________
Als du auf die Welt kamst, weintest du, und um dich herum freuten sich alle. Lebe so, daß, wenn du die Welt verläßt, alle weinen und du allein lächelst.
Kenpachi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 30

Win Vista, Win 7
C#, VB, ASP.NET (VS 2010 Express)
BeitragVerfasst: Fr 15.01.10 14:44 
Moin moin.

Ich habe auf dotnet-snippets.de etwas gefunden, was dir eigentlich helfen sollte: http://dotnet-snippets.de/dns/c-ordnergroesse-ermitteln-SID739.aspx
Die Klasse sieht für mich jedenfalls recht vernünftig aus. ;)


Grüße...