wie kann ich ordner im unterordner von ordner löschen (vb2008 .net 3.5)

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    wie kann ich ordner im unterordner von ordner löschen (vb2008 .net 3.5)

    hallo heute habe ich mal wieder ein problem:
    ich möchte einen speziellen ordner in allen unterordnern von einem ordner löschen (sorry falsch ich das ganze ein bisschen kompliziert mache weil ich weiß nicht wie ich das ausdrücken soll)
    aber ich kenne dazu keinen code und bei google finde ich da keine ergebnisse die meiner frage entsprechen.
    ein freund von mir hat mir den code hier schon gegeben:
    pastebin.com/aysPVd1i
    aber da tut sich nichts... was mache ich falsch? 8|

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

    Der Hintergrund ist in diesem Zitat quasi erklärt:

    Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben.


    Wenn du programmieren lernst (bzw lernen willst) gebe ich dir eine andere Antwort als wenn du es nur mal so brauchst.

    Da du offenbar lernst geb ich dir gleich mal folgendes auf den Weg. Ein guter Programmierer ist jemand der sich selber zu helfen weiß.
    Man sollte also gut googlen können und auch andere Hilfsmittel zu nutzen wissen. Ist man nach diversen durchprobieren etc nicht am Ziel.
    Dann kann man sich eine gezielte Frage überlegen am besten mit möglichst viel Informationen und seinem eigenen (gescheitertem) Versuch.

    Also Google Suche. Ich würde mal eingeben "Delete Directory VB.NET".
    Ja Englisch ist im Normalfall die Sprache der Wahl.

    Die ersten 3 Treffer sehen ja schon gut aus. Einer zeigt das Problem bei einem User von StackOverflow. Eine der besten Quellen im Internet. Man muss nur etwas vorsichtig sein da die Lösungen dort auch nicht immer die besten sind und vor allem oft auf ältere Frameworks zB Bezug nehmen.
    Der zweite ist MSDN. Ja das schaut doch gut aus. Es gibt direkt von Microsoft, dem Entwickler von VB.NET und Visual Studio eine Dokumentation!!
    msdn.microsoft.com/en-us/library/62t64db3(v=vs.110).aspx

    Ok so löscht man ein Directory. Aber:
    "Deletes an empty directory from a specified path."
    steht gleich oben da.

    Hm, ist dein Verzeichnis leer oder nicht? Das weiß ich nicht, da ich quasi gerade das durchlaufe was du als angehender Programmierer machen müsstest. Naja, gehen wir mal davon aus das der Ordner nicht leer ist.
    Aber was ist denn das. Links sieht man noch eine zweite Überladung (Überladung einer Methode bedeutet, das du andere Parameter mit dem selben Methodennamen aufrufen kannst und dann häufig etwas leicht anderes macht) für die Methode:

    - Delete Method (String)
    - Delete Method (String, Boolean)

    Ein Boolean ist im Normalfall ein Schalter. Schauen wir uns die doch mal an!!

    ​Directory.Delete Method (String, Boolean).NET Framework (current version)

    Deletes the specified directory and, if indicated, any subdirectories and files in the directory.



    Hey Problem schon gelösst!

    Ok. Diese Methode ist offenbar geeignet. Jetzt müssen wir nur noch iwie an das Verzeichnis kommen.
    Die Frage ist: "ich möchte einen speziellen ordner in allen unterordnern von einem ordner löschen"

    Ok also haben wir offenbar einen Ordner als "root". Den könnten wir ja einer Methode als Parameter übergeben, mit der wir das löschen durchführen wollen

    VB.NET-Quellcode

    1. Sub DeleteSpecialFolders(ByVal rootFolder as String)
    2. End Sub


    Das ist nun unsere Methode. Das Ganze nennt man auch Signatur -> Methodenname + Rückgabewert + Parameter. Sub ist eine Methode ohne Rückgabewert und es gibt bei uns einen Parameter.
    So wie durchläuft man diesen Folder jetzt???

    Da wir die erste Methode ja bereits haben. Bleiben wir doch da bei MSDN. Oben in der Navigation sieht man ja das wir uns in der Directory Klasse bewegen. Die hat ja vll noch mehr Funktionalitäten!
    Klicken wir mal drauf:
    msdn.microsoft.com/en-us/libra….directory(v=vs.110).aspx

    Oh. Eine Liste aller Methoden. Schauen wir die doch mal durch. Hm

    EnumerateDirectories(String)Returns an enumerable collection of directory names in a specified path.


    könnte was sein. Enumerable collection. Watt issn das? Naja, schauen wir mal noch weiter.

    GetDirectories(String) Returns the names of subdirectories (including their paths) in the specified directory.


    Klingt auch gut und hat kein Enumerable drin. Da müssen wir wohl weniger lesen, nehmen wir erstmal das vll einfachere!
    Angeklickt:
    msdn.microsoft.com/en-us/library/c1sez4sc(v=vs.110).aspx

    Oh das klingt ja gut. Unten ist sogar ein Beispiel Code für VB.NET wie man die Methode verwendet.

    ​Return ValueType: System.String()An array of the full names (including paths) of subdirectories in the specified path, or an empty array if no directories are found.


    Weißt du schon was Arrays sind? Naja, das weiß ich nicht, falls nicht solltest du dir das mal anschauen.

    Hier der Beispiel Code:

    VB.NET-Quellcode

    1. Public Shared Sub ProcessDirectory(ByVal targetDirectory As String)
    2. Dim subdirectoryEntries As String() = Directory.GetDirectories(targetDirectory)
    3. ' Recurse into subdirectories of this directory.
    4. Dim subdirectory As String
    5. For Each subdirectory In subdirectoryEntries
    6. ProcessDirectory(subdirectory)
    7. Next subdirectory
    8. End Sub 'ProcessDirectory


    Mal verkürzt, da uns ja die Dateien nicht interessieren. Ich kann dir hier sagen, MS Beispiel Code ist nicht immer das Gelbe vom Ei, aber man kann es oft als Ansatz verwenden.
    In diesem Fall ist der Code auf jeden Fall ausreichend. In der Variable subdirectory haben wir unser Unterverzeichnis. Den Aufruf von ProcessDirectory mit dem Unterordner können wir uns sparen, wir wollen ja nur etwas löschen.
    Ok wir haben löschen und durchlaufen. Jetzt ist nur noch die Frage was ist, wenn der Ordner nicht existiert oder aus einem Grund nicht gelöscht werden kann? (Keine Berechtigung, oder eine Datei darin ist gerade in Verwendung? Spielt das überhaupt eine Rolle? Dann funktioniert das Löschen wahrscheinlich nicht. Und wie holt man den nächsten Unterordner zum Löschen überhaupt ran?

    Ok langsam wird meine Antwort ewig lang. Ich wollte dir eigentlich eher erklären, wie man selber etwas erreicht als dir einfach die Antwort hinzuklatschen.

    Und dabei bin ich noch nicht mal bis zum Ende gekommen...

    Naja vielleicht hilft es dir ja oder es zu viel zum Lesen. Lesen ist übrigens eine Tätigkeit die ich einen großen Teil meiner Programmiertätigkeit einnimmt.
    Vielleicht kannst du ja damit was anfangen und einen eigenen Code daraus schreiben und diesen dann posten, wenn du bei etwas nicht weiterkommst.

    Viel Glück! :thumbsup:
    Das ist meine Signatur und sie wird wunderbar sein!
    @Die Wucht Sieh Dir mal die Klasse System.IO.DirectoryInfo an.
    Da kannst Du einerseits die Unterverzeichnisse auflisten als auch eine Instanz von löschen.
    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!
    @Mono

    Daumen hoch! Der Post war viel Arbeit. Finde es super wie du es Ihm erklärst. Auch das will gelernt sein, sehe ich immer wieder.

    ​Trotzdem möchte ich Ihm ein paar Tipps mitgeben:

    Schau dir ​IO.Directory.GetDirectories an, gehe in einer Schleife durch, und dann schau dir an wie du mit ​ IO.Directory.Delete löschen kannst.
    ​Wenn du mal einen Code hast und probiert hast können wir dir gerne mitteilen was dein Fehler ist/war. Denn so bleibt der Lerneffekt wenigstens nicht aus.

    ​Das ist auch nicht Böse von uns gemeint, bitte nicht so annehmen. Wir meinen es gut mit dir.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Mono schrieb:

    Also Google Suche. Ich würde mal eingeben "Delete Directory VB.NET".

    Das kann man noch verfeinern.
    Es ist effektiver das grundlegende Thema an den Anfang , also als Präfix zu setzen und dan immer spezifischer zu werden.
    Also, ".net vb directory delete", wobei ich das vb weglassen würde, damit nicht gute C# Lösungen, die ja meist leicht übersetzt werden können, nach unten rutchen.
    "Da du offenbar lernst geb ich dir gleich mal folgendes auf den Weg. Ein guter Programmierer ist jemand der sich selber zu helfen weiß."

    ich weiß, aber ich glaube du verstehst da etwas falsch: ich lerne das nicht von der Schule oder soetwas sondern allein in meiner freizeit als beschäftigung

    "Ja Englisch ist im Normalfall die Sprache der Wahl. "

    ich weiß, so google ich ja auch.

    "So wie durchläuft man diesen Folder jetzt???"
    das musst du mir schon verraten.

    Weißt du schon was Arrays sind? Naja, das weiß ich nicht
    Ich aber!


    VB.NET-Quellcode

    1. Public Shared Sub ProcessDirectory(ByVal targetDirectory As String)
    2. Dim subdirectoryEntries As String() = Directory.GetDirectories(targetDirectory)
    3. ' Recurse into subdirectories of this directory.
    4. Dim subdirectory As String
    5. For Each subdirectory In subdirectoryEntries
    6. ProcessDirectory(subdirectory)
    7. Next subdirectory
    8. End Sub 'ProcessDirectory

    Das Ganze kann garnet gehen da nirgendwo die variable "Directory" benennt wird


    "Jetzt ist nur noch die Frage was ist, wenn der Ordner nicht existiert oder aus einem Grund nicht gelöscht werden kann? (Keine Berechtigung, oder eine Datei darin ist gerade in Verwendung? Spielt das überhaupt eine Rolle? Dann funktioniert das Löschen wahrscheinlich nicht. Und wie holt man den nächsten Unterordner zum Löschen überhaupt ran? "
    das ganze in ein "Try" packen und mit "Catch" den Fehler "rausfiltern"

    sorry falls ich das ganze ein wenig komliziert mache.aber trotzdem danke für die antwort.
    @Die Wucht Wenn der Ordner nicht existiert, wird er bei GetDirectories() nicht gelistet.
    Kann er nicht gelöscht werden, gibt es eine wohl definierte Exception (Zugriffsrechte oder System oder so), genau die musst Du abfangen und weitermachen.
    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!