Benutzer mit den meisten Antworten
Ordnergröße ermitteln

Frage
-
Hallo,
Ich habe ein Backup Programm als Projekt und bekomme es irgendwie nicht hin, dass ich die Größe der Ordner (mit ihren Dateien drin ) herausbekomme.
Deswegen wollte ich mal fragen wie das geht:
Bei den Dateien mache ich das so:
Try Dim file As String For Each file In OpenFileDialog1.FileNames Dim infoReader As System.IO.FileInfo infoReader = New FileInfo(file) With ListView1.Items.Add(IO.Path.GetFileNameWithoutExtension(file)) If TextBox2.Text = "" Then TextBox2.Text = "1" Else TextBox2.Text = (Integer.Parse(TextBox2.Text) + 1).ToString() End If .SubItems.Add(roundandreturnfilesize(infoReader.Length)) If TextBox1.Text = "" Then TextBox1.Text = infoReader.Length.ToString() Else TextBox1.Text = (Long.Parse(TextBox1.Text) + infoReader.Length).ToString() End If .SubItems.Add(IO.Path.GetExtension(file)) .SubItems.Add(IO.Path.GetFullPath(file)) .SubItems.Add(IO.File.GetCreationTime(file).ToString()) .SubItems.Add(IO.File.GetLastWriteTime(file).ToString()) .SubItems.Add(IO.Path.GetPathRoot(file)) .SubItems.Add(TextBox2.Text) Label4.Text = ListView1.Items.Count.ToString() Label6.Text = roundandreturnfilesize(Double.Parse(TextBox1.Text)) End With Next file Catch ex As Exception MessageBox.Show(ex.Message) End Try
Public Function roundandreturnfilesize(ByVal size As Double) As String Select Case size Case Is < 1000 If size > 0 Then Return Math.Round(size, 2).ToString & " B" Else Return Math.Round(size, 2).ToString & "" End If Case Is < 1000000 Return Math.Round((size / 1000), 2).ToString & " KB" Case Is < 1000000000 Return Math.Round((size / 1000000), 2).ToString & " MB" Case Is < 1000000000000 Return Math.Round((size / 1000000000), 2).ToString & " GB" Case Is < 1000000000000000 Return Math.Round((size / 1000000000000), 2).ToString & " TB" Case Is < 1000000000000000000 Return Math.Round((size / 1000000000000000), 2).ToString & " PB" Case Else Return "" End Select End Function
Aber bei den Ordner bekomme ich dass irgendwie nicht hin
Antworten
-
Tja, ok ich hatte einen kleinen Fehler im Code, man muss das FileInfo-Objekt natürlich aus dem Dateipfad erstellen und nicht aus dem Ordnerpfad.
n += New FileInfo(file).Length 'Dateigröße hinzufügen'
Sonst funktioniert mein Code.Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.- Als Antwort markiert Tobpy Sonntag, 3. November 2013 14:57
Alle Antworten
-
Hallo,
mal davon abgesehen, das Zeilen wieTextBox2.Text = (Integer.Parse(TextBox2.Text) + 1).ToString()
sinnlose Leistungsfresser sind [1], geht es bei Ordnern nicht viel anders.
Gehe einfach die Dateien im Ordner durch und ggf. Unterordner. Dann ermittelst du die Größe aller gesammelten Dateien und summierst die Werte. Zum Auslisten der Dateien im Ordner, kannst du dir das hier ansehen. Zum Auflisten der Ordner gucke mal hier.
Man könnte das ganze auch noch ander, rekursiv gestalten. Hier ein ungetestetes Beispiel:
''' <summary>' ''' Ermittelt die Größe der Dateien im Ordner' ''' </summary>' ''' <param name="path">Der Pfad der Ordner.</param>' ''' <param name="subFolder">Gibt an, ob Unterordner berücksichtigt werden sollen.</param>' Function GetFileSizesOfFolder(path As String, subFolder As Boolean) As Long Dim n As Long = 0 For Each file In Directory.GetFiles(path) 'Alle Dateien durch gehen' n += New FileInfo(path).Length 'Dateigröße hinzufügen' Next If subFolder Then For Each folder In Directory.GetDirectories(path) 'Alle Ordner durch gehen' n += GetFileSizesOfFolder(folder, subFolder) 'Größe der Unterordner-Dateien dazu addieren' Next End If Return n End Function
[1] Wenn du das ändern möchtest, dann speichere die Daten als Zahl (Long) ab und parse den Wert nicht jedesmal aus einem String.
PS: Deine roundandreturnfilesize-Methode arbeitet nicht ganz richtig, da bei Bytes 1024 die Umrechnungszahl ist, nicht 1000. Also 1024, 1048576, 1073741824, ...
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.- Bearbeitet Tom Lambert (Koopakiller)Moderator Samstag, 2. November 2013 17:54 Formatierung des Codes
-
- Mein Code ist ungetestet, es kann also noch ein Fehler drinn sein.
- Funktioniert nicht? Ohne Fehler....
- usw.
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke. -
Tja, ok ich hatte einen kleinen Fehler im Code, man muss das FileInfo-Objekt natürlich aus dem Dateipfad erstellen und nicht aus dem Ordnerpfad.
n += New FileInfo(file).Length 'Dateigröße hinzufügen'
Sonst funktioniert mein Code.Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.- Als Antwort markiert Tobpy Sonntag, 3. November 2013 14:57