alle dateien und ordner auf einem stick löschen

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von rose90.

    alle dateien und ordner auf einem stick löschen

    Hi hab mich hier extra angemeldet da ich nach stunden lagen googlen und auch hier im forum nix gefunden hab.
    Ich suche eine möglichkeit über vb einen usb-stick zu löschen.
    Also es sollen alle dateien + ordner gelöscht werden die auf dem usb-stick sind den ich über den Pfad angebe gelöscht werden. formatieren kommt nicht in frage da es zu lange dauert.
    bei cmd funktioniert das über den befehl rmdir F: /s /q (F: = der stick)
    Hat jemad ne idee wie ich das realisieren kann?
    Formatieren geht sicher schneller als alle Daten zu löschen, zumindest wenn eine schnell Formatierung durchführst.

    Ansonsten musst dir eine Funktion schreiben die Rekursiv alle Ordner durchgeht und die darin befindlichen Dateien löscht.

    Wenn den CMD Befehl ausführen willst, könntest die Process-Kallse nutzen.
    nein formatieren dauert länger. da es nur kleine dateien sind.
    ich suche eine komplett vb gebundene variante. alle dateien löschen geht ohne probleme nur die ordner sollen auch gelöscht werden.
    ich brauche das programm um so ca 1000 usb-sticks zu löschen.
    Nun also viele Dateien (auch kleine) dauert das einlesen länger. Wenn ich meinen 8GB Stick schnell formatiere dauert das ein paar Sekunden. Würden auf dem Stick ~50.000 Dateien liegen, in 1000 Ordnern, dann würde eine rekursive VB-Funktion schon deutlich länger brauchen, weil erstmal alle Dateien eingelesen werden müssen, sowas dauert.

    Aber wenn dennoch so löschen willst, dann solltest du dir die Directory-Klasse ansehen und wenn du nicht weißt das rekursive Funktionen sind, solltest du dir diesen Begriff auch mal zu gemüte führen.

    PS: Bei der schnell Formatierung wird lediglich das Inhaltsverzeichnis des Sticks gelöscht und ein Betriebssystem erkennt ihn somit als leer. Löschst du jede Datei einzelnt, wird jede Datei einzelnt aus dem Inhaltsverzeichnis gelöscht, was nochmal zu der Zeit zum ermitteln der Dateien hinzukommt.

    VB.NET-Quellcode

    1. For Each foundFile As String In My.Computer.FileSystem.GetFiles( usbstick1, _
    2. FileIO.SearchOption.SearchAllSubDirectories, "*.*")
    3. My.Computer.FileSystem.DeleteFile(foundFile, _
    4. FileIO.UIOption.AllDialogs, _
    5. FileIO.RecycleOption.DeletePermanently) Next

    habe das über die system eigenen funktionen schon ausprobiert.
    sprech da aus erfahrung das das formatieren länger dauert.
    ich suche halt einfach nen code der es mir ermöglicht nicht nur die dateien sondern auch die ordner löscht.
    egal wie sie heißen.
    Problematisch wirds bei Ordnern wo kein Zugriff drauf hast wie z.B: System Volume Information oder RECYCLER oder andere Systemordner. Es kann gut gehen, muss aber nicht und da dies trotzdem der Fall sein KÖNNTE ist der Code nicht geeignet. Zumal dort auch erstmal alle Dateien eingelesen werden um sie dann zu löschen.

    Formatieren ist und bleibt die schnellere Methode.
    formatieren steht komplett außer frage.
    ich such einfach nur ne möglichkeit wie ich ordner + dateien in einemm angegeben ordner löschen kann der befahl den ich gepostet hab funktioniert nur das halt die ordner zurück bleiben. und da ich nicht 10000 dateien und 200 ordner lösche sondern nur 3-5 dateien und 1 oder 2 ordner dürfte das doch net so schwer sein einfach alles in einem angegbenen pfad(ordner oder halt usbstick) zu löschen egal ob datei oder ordner.
    das problem bei der deletedirectory methode ist das ich zwar alles löschen kann wenn ich entsprechende befehle eingebe nur das wenn ich den usbstick als pfad angebe er versucht diesen zu löschen was natürlich net geht da es ein stammverzeichnis ist und diese nicht löschbar sind. ich habe das alles schon weit über 10000 mal getestet und bis jetzt halt selbst das schnell formatieren länger gedauert wie der cmd befehl rmdir /s /q. also ich weiß wo von ich da rede da bringt es mir nix wenn ihr andauernt versucht das gegenteil zu beweisen. und den cmd befehl ein zu bauen ist auch blöd da es auch über vb selbst möglich sein sollte.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „rose90“ ()

    Nun, das wird mit der von dir geposteten Methode schwierig, weil du ja nun ALLE Dateien in einem Array hast und diese mittels der Schleife durch gehst, du hast also absolut keine Referenz auf den Ordner. Mit der von mir genannten rekursiven Methode ginge das ziemlich einfach und zudem auch noch perfomant und vorallem sicher.

    Weiterführende Schlagworte zum Informieren:
    - Rekursive Funktionen
    - MSDN: Directory-Klasse (zum auflisten der Verzeichnisse und Dateien und zum Löschen von Verzeichnissen)
    - MSDN: File-Klasse (zum Löschen von Dateien)
    Sonst funktioniert es:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    3. Dim eingabetest As String = "D:\Test"
    4. For Each foundFile As String In My.Computer.FileSystem.GetFiles(eingabetest, FileIO.SearchOption.SearchAllSubDirectories, "*.*")
    5. My.Computer.FileSystem.DeleteFile(foundFile, FileIO.UIOption.OnlyErrorDialogs, FileIO.RecycleOption.DeletePermanently)
    6. Next
    7. For Each ordner0 As String In My.Computer.FileSystem.GetDirectories(eingabetest, FileIO.SearchOption.SearchAllSubDirectories)
    8. My.Computer.FileSystem.DeleteDirectory(ordner0, FileIO.UIOption.OnlyErrorDialogs, FileIO.RecycleOption.DeletePermanently)
    9. On Error Resume Next
    10. Next
    11. End Sub
    12. End Class

    waren ein paar gute denk anstöße dabei wo ich vorher nicht drauf gekommen bin danke
    @rose: wieso fragst du nach Hilfe wenn es doch alleine machst? Wir geben dir hier wertvolle Tipps wie du sowas perfomant und elegant löst, aber du nimmst es nicht an und wurschtelst dir stattdessen irgendein schlechten unperformanten Code zurecht.

    picoflop schrieb:

    Wo ist das Problem mit:
    http://msdn.microsoft.com/de-de/library/77s9s78y(v=vs.90).aspx
    Dann beschränkt sich das ganze auf den Inhalt des Toplevel Verzeichnisses. Wobei ich keine Ahnung habe, ob die Funktion Wildcards unterstützt (also "C:\*.*" o.ä.)
    da ist das problem das man den ordner den man angibt auch löscht un das geht in meinem fall nicht vllt hab ich da auch irgend was falsch gemacht.

    Dodo schrieb:

    @rose: wieso fragst du nach Hilfe wenn es doch alleine machst? Wir geben dir hier wertvolle Tipps wie du sowas perfomant und elegant löst, aber du nimmst es nicht an und wurschtelst dir stattdessen irgendein schlechten unperformanten Code zurecht.
    ich bin froh das es jetzt so klappt wie ich es mir vorgestellt hab. Und zu dem wolltet ihr es unbedingt über formatieren machen. da ich da keine guten erfahrungen gemacht hab war und ist es für mich ausgeschlossen. kannst mir ja nen perfomanten code zeigen weiß net genau was du damit meinst. an meinem beispiel, bzw den code den ich gepostet hab so um schreiben das er die funktion behält und perfomant wird
    Nun, das mit dem Formatieren habe wir ja dann verworfen, als du meintest nur in einem Verzeichnis alle Dateien und Ordner löschen zu wollen. Ich habe in meinen letzten Postings von einer rekursiven Ordnersuche gesprochen und dir sogar ein Link zu einem Code gegeben in welchem so eine Funktion realisiert wird und der Code wäre performant.
    das sind 3 code teile toll als neuling in vb ist es nicht gerade einfach da den unterschied zu sehen. schön wäre jetzt einfach mal meinen "nicht perfomanten code" als perfomanten code zu sehen das ich das auch auf anheib verstehe und ich hab mir die begriffe angesehen.