[VB.NET] User auslesen und bestimmte Dateien löschen

  • VB.NET

Es gibt 61 Antworten in diesem Thema. Der letzte Beitrag () ist von Drahuverar.

    Ich habe es dir doch schon eins zu eins in meinem vorherigen Post erklärt..
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Wie gesagt.. du benutzt zu erste die Funktion GetFolderSize Diese speicherst du in einer Variabel:
    z.b:

    VB.NET-Quellcode

    1. Dim s1 as Long = GetFolderSize("PFAD ZUM TEMP ORDNER")

    Anschließend löscht Benutzt du die Funktion ClearTempFolder
    Du errechnest dir nun erneut die Größe: Dim s2 as Long = GetFolderSize(blablabla...). Nun Rechnest du nurnoch s2-s1 und tada du hast die gelöschten Bytes.
    Anzeigen tust du sie mit TextboxWieAuchImmerSieHeißt.Text = (s2 - s1).ToString(). Aber wenn es bei dir beim Ausgeben eines Wertes in einer Textbox scheitert, solltest du dir wirklich einmal die Grundlagen ansehen.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Gather schrieb:

    Wie gesagt.. du benutzt zu erste die Funktion GetFolderSize Diese speicherst du in einer Variabel:
    z.b:

    VB.NET-Quellcode

    1. Dim s1 as Long = GetFolderSize("PFAD ZUM TEMP ORDNER")

    Anschließend löscht Benutzt du die Funktion ClearTempFolder
    Du errechnest dir nun erneut die Größe: Dim s2 as Long = GetFolderSize(blablabla...). Nun Rechnest du nurnoch s2-s1 und tada du hast die gelöschten Bytes.
    Anzeigen tust du sie mit TextboxWieAuchImmerSieHeißt.Text = (s2 - s1).ToString(). Aber wenn es bei dir beim Ausgeben eines Wertes in einer Textbox scheitert, solltest du dir wirklich einmal die Grundlagen ansehen.


    Hallo @Gather,
    sorry, dass ich dir so auf den Geist gehe. Mir hat das mit dem String wieder gefehlt...
    @Gather ich habe aber noch eine Frage... :P
    mir wird in der TextBox jetzt nur die gelöschte Datenmenge von dem User der das Programm ausgeführt hat angezeigt, probiere schon die ganze Zeit die komplette Menge anzeigen zu lassen - bekomme es aber nicht hin... Hier der bisherige Code:

    VB.NET-Quellcode

    1. Private Sub ButtonDatenLoeschen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonDatenLoeschen.Click
    2. Dim s1 As Double = GetFolderSize(System.IO.Path.GetTempPath()).ToString
    3. For Each item In ListBoxGefundeneUser.Items 'Für jeden gefundenen Benutzer ..\Temp leeren
    4. ClearTempFolder(item)
    5. Next
    6. TextBoxStatus.Text = "Temporäre Dateien aller lokalen Benutzer gelöscht." 'Status im Textfeld ändern
    7. If ButtonUserAbfragen.Enabled = False Then 'Button aktiveren oder deaktivieren
    8. ListBoxGefundeneUser.Items.Clear()
    9. ButtonUserAbfragen.Enabled = True
    10. Else
    11. ButtonUserAbfragen.Enabled = False
    12. End If
    13. Dim s2 As Double = GetFolderSize(System.IO.Path.GetTempPath()).ToString
    14. For Each item In ListBoxGefundeneUser.Items
    15. GetFolderSize(item)
    16. TextBoxDatenMenge.Text = GetFolderSize(item)
    17. Next
    18. Dim Ergebnis As Double = ((s1 - s2) / 1000000)
    19. If Ergebnis <= 0 Then
    20. TextBoxDatenMenge.Text = "Bereits alle temporären Dateien gelöscht!"
    21. Else
    22. TextBoxDatenMenge.Text = Ergebnis.ToString
    23. End If
    24. End Sub

    MS95 schrieb:

    die komplette Menge
    Meinst Du so was (Multiline-Textbox):

    VB.NET-Quellcode

    1. TextBox1.AppendText("bla" & Environment.NewLine)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo @RodFromGermany,
    ich weiß nicht ganz, ob es das ist was ich suche... Also ich möchte praktisch die Größe von allen Temp-Ordner der gefundenen User in einer Variable speichern - anschließend sollen die temporären Dateien gelöscht werden und danach sollen wieder die Größen der Temp-Ordner der gefundenen User ermittelt werden und in einer Variable gespeichert werden. Wenn das getan ist, will ich die gelöschte Datenmenge ermitteln, indem ich die Variablen subtrahiere.
    Mein Problem ist, dass ich nicht weiß wie ich das mit dem Ermitteln der Größen für ALLE User mache - mit dem ausführendem User ist es kein Problem...
    @MS95 Sorry, falsch verstanden.
    Trenne mal strikt Deine Probleme.
    1. Zugriff auf die Ordner anderer User überhaupt,
    2. Manipulation der Dateien,
    3. Dokumentation der Manipulation.
    Welche dieser Probleme sind ja|nein gelöst?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also das Programm funktioniert komplett... habe auf alles zugriff, kann alle Dateien löschen.

    Es geht nur noch darum die Größe der Ordner VOR dem Löschen der Daten zu ermitteln und natürlich NACH dem Löschen... und die beiden Größen dann subtrahieren und das Ergebnis in einer TextBox ausgeben
    @MS95 Mit welchem Code löschst Du die Dateien?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Oben habe ich den Code gepostet, hier aber nochmal genau der Ausschnitt:

    VB.NET-Quellcode

    1. Private Sub ButtonDatenLoeschen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonDatenLoeschen.Click
    2. For Each item In ListBoxGefundeneUser.Items 'Für jeden gefundenen Benutzer ..\Temp leeren
    3. ClearTempFolder(item)


    Hier die Function ClearTempFolder:

    VB.NET-Quellcode

    1. Private Function ClearTempFolder(ByVal User As String) As Boolean
    2. Dim dir As String = System.IO.Path.GetTempPath().Replace(Environment.UserName, User)
    3. If Directory.Exists(dir) Then
    4. Try
    5. For Each subDir In Directory.GetDirectories(dir)
    6. Try : Directory.Delete(subDir, True) : Catch : End Try
    7. Next
    8. For Each f In Directory.GetFiles(dir) : Try : File.Delete(f) : Catch : End Try
    9. Next
    10. Catch ex As Exception : Return False : Exit Function
    11. End Try
    12. Return (True)
    13. Else : Return False
    14. End If
    15. End Function

    @MS95 Probier mal dies:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Function ClearTempFolder(ByVal User As String) As Boolean
    2. Dim dir As String = System.IO.Path.GetTempPath().Replace(Environment.UserName, User)
    3. Dim space As Long = 0
    4. If Not Directory.Exists(dir) Then
    5. Return False
    6. End If
    7. Try
    8. Dim files = New DirectoryInfo(dir).GetFiles("*.*", SearchOption.AllDirectories)
    9. Dim fileLength As Long
    10. For Each f In files
    11. Try
    12. fileLength = f.Length
    13. f.Delete()
    14. space += fileLength
    15. Catch
    16. End Try
    17. Next
    18. For Each subDir In Directory.GetDirectories(dir)
    19. Try
    20. Directory.Delete(subDir, True)
    21. Catch
    22. End Try
    23. Next
    24. Catch ex As Exception
    25. Return False
    26. End Try
    27. MessageBox.Show(space.ToString)
    28. Return True
    29. End Function
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Habe nun meinen urpsünglichen Code für die Function durch deinen ersetzt. Jetzt öffnen sich dann recht viele MsgBoxen mit den Werten... möchte aber, dass die ganzen Differenzen addiert und in der TextBoxDatenMenge addiert als eine Zahl ausgegeben werden ?(

    MS95 schrieb:

    möchte aber
    Dann tue es so, wie Du es brauchst:
    Gib den Wert als ByRef-Parameter zurück.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    @MS95 Probier mal dies:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Function ClearTempFolder(ByVal User As String) As Boolean
    2. Dim dir As String = System.IO.Path.GetTempPath().Replace(Environment.UserName, User)
    3. Dim space As Long = 0
    4. If Not Directory.Exists(dir) Then
    5. Return False
    6. End If
    7. Try
    8. Dim files = New DirectoryInfo(dir).GetFiles("*.*", SearchOption.AllDirectories)
    9. Dim fileLength As Long
    10. For Each f In files
    11. Try
    12. fileLength = f.Length
    13. f.Delete()
    14. space += fileLength
    15. Catch
    16. End Try
    17. Next
    18. For Each subDir In Directory.GetDirectories(dir)
    19. Try
    20. Directory.Delete(subDir, True)
    21. Catch
    22. End Try
    23. Next
    24. Catch ex As Exception
    25. Return False
    26. End Try
    27. MessageBox.Show(space.ToString)
    28. Return True
    29. End Function


    RodFromGermany schrieb:

    MS95 schrieb:

    möchte aber
    Dann tue es so, wie Du es brauchst:
    Gib den Wert als ByRef-Parameter zurück.


    Und weil ich es nun schon seit ca. 2,5 Stunden nicht hinbekomme habe ich mich hier wieder gemeldet :(
    @MS95 Da fehlen ja elementare Grundlagen. :/
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Function ClearTempFolder(ByVal User As String, ByRef space As Long) As Boolean
    2. Dim dir As String = System.IO.Path.GetTempPath().Replace(Environment.UserName, User)
    3. space = 0
    4. If Not Directory.Exists(dir) Then
    5. Return False
    6. End If
    7. Try
    8. Dim files = New DirectoryInfo(dir).GetFiles("*.*", SearchOption.AllDirectories)
    9. Dim fileLength As Long
    10. For Each f In files
    11. Try
    12. fileLength = f.Length
    13. f.Delete()
    14. space += fileLength
    15. Catch
    16. End Try
    17. Next
    18. For Each subDir In Directory.GetDirectories(dir)
    19. Try
    20. Directory.Delete(subDir, True)
    21. Catch
    22. End Try
    23. Next
    24. Catch ex As Exception
    25. Return False
    26. End Try
    27. Return True
    28. End Function
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    @MS95 Da fehlen ja elementare Grundlagen. :/
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Function ClearTempFolder(ByVal User As String, ByRef space As Long) As Boolean
    2. Dim dir As String = System.IO.Path.GetTempPath().Replace(Environment.UserName, User)
    3. space = 0
    4. If Not Directory.Exists(dir) Then
    5. Return False
    6. End If
    7. Try
    8. Dim files = New DirectoryInfo(dir).GetFiles("*.*", SearchOption.AllDirectories)
    9. Dim fileLength As Long
    10. For Each f In files
    11. Try
    12. fileLength = f.Length
    13. f.Delete()
    14. space += fileLength
    15. Catch
    16. End Try
    17. Next
    18. For Each subDir In Directory.GetDirectories(dir)
    19. Try
    20. Directory.Delete(subDir, True)
    21. Catch
    22. End Try
    23. Next
    24. Catch ex As Exception
    25. Return False
    26. End Try
    27. Return True
    28. End Function


    Wenn ich den Code von dir nehme bekomme ich diesen Fehler hier:
    BC30455 Für den Parameter "space" von "Private Function ClearTempFolder(User As String, ByRef space As Long) As Boolean" wurde kein Argument angegeben.

    MS95 schrieb:

    diesen Fehler hier
    Sieh Dir Deinen Aufruf und meine neue Deklaration der Funktion an.
    Welche Parameter kommen hi und da vor bzw. nicht vor?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @MS95 So was:

    VB.NET-Quellcode

    1. Dim spaceAll As Long = 0
    2. Dim space As Long
    3. If ClearTempFolder("User", space) Then
    4. spaceAll += space
    5. End If
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!