Kein Dateizugriff auf eigenem Desktop? IO.File.Delete(Pfad)

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von BlackSpider.

    Kein Dateizugriff auf eigenem Desktop? IO.File.Delete(Pfad)

    Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim Pfad_Windows(1) As String
    3. Pfad_Windows(0) = "C:\Users\user\Desktop\TEST\"
    4. Pfad_Windows(1) = "C:\Users\user\Desktop\TEST 2\"
    5. For Each Pfad As String In Pfad_Windows
    6. IO.Directory.GetFiles(Pfad)
    7. IO.File.Delete(Pfad)
    8. Next
    9. End Sub


    Moin,

    mein Code geht immer auf den Hammer und ich weiß nicht warum. Ich möchte gerne mehrere Ordner durchlaufen und die Ordnerinhalte löschen. Für einen Ordner ist das alle kein Problem, aber mit mehreren klappts bei mir einfach nicht. Hilfe! X/

    VG
    Lico
    Bilder
    • Unbenannt.PNG

      10,18 kB, 537×309, 113 mal angesehen
    Du versuchst die Datei mit dem Namen "C:\Users\user\Desktop\TEST\" zu löschen und nicht die Datien die sich in dem Pfad befinden.
    Deine Logic ist einfach falsch.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Ok, ich das Funktioniert so auch nicht... Ich steh total auf dem Schlauch. Wie bekomme ich es hin, ich mehrere Ordner durchlaufen kann, ohne diese einzeln als Variable zu deklarieren? IO.Directory.GetFiles() gibt mir nur immer die angehängte Fehlermeldung aus. Die Methode scheint mit Arrays nicht klar zukommen?

    Helft bitte einem Anfänger mal auf die Sprünge. :rolleyes:

    PS: Mein derzeitiger Stand (wahrscheinlich wenig sinnvoll?)

    VB.NET-Quellcode

    1. Dim Pfad_Windows() As String = {"C:\Users\user\Desktop\TEST\", "C:\Users\user\Desktop\TEST 2\"}
    2. For Each Pfad As String In Pfad_Windows
    3. Pfad = IO.Directory.GetFiles(Pfad_Windows)
    4. IO.File.Delete(Pfad)
    5. Next

    Bilder
    • 2017-01-31 12_37_42-2017-01-31 12_21_56-Greenshot.png ‎- Fotos.png

      23,03 kB, 524×58, 116 mal angesehen

    VB.NET-Quellcode

    1. Sub DeleteFilesFromFolder(Folder As String)
    2. If IO.Directory.Exists(Folder) Then
    3. For Each _file As String In IO.Directory.GetFiles(Folder)
    4. IO.File.Delete(_file)
    5. Next
    6. End If
    7. End Sub


    glaube das sollte so gehen
    -... .-.. .- -.-. -.- ... .--. .. -.. . .-.
    The Leading Horse is white - the second horse is red - the third one is a black - the last one is a green.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim Pfad_Windows() As String = {"C:\Users\user\Desktop\TEST\", "C:\Users\user\Desktop\TEST 2\"}
    3. For Each File As String In IO.Directory.GetFiles(Pfad_Windows)
    4. IO.File.Delete(File)
    5. Next
    6. End Sub


    Ich hab´s mal umgebaut, aber irgendwie kommt er mit den Array nicht klar... Warum? Das sind doch einfach nur "dumme" Strings? :S

    ​Fehler 1 Der Wert vom Typ "1-dimensionales Array von String" kann nicht in "String" konvertiert werden.

    Lico schrieb:

    C:\Users\user\Desktop\TEST\


    Lico schrieb:

    C:\Users\user\Desktop\TEST 2\

    ... sind aber Ordner und keine Dateien! (Siehe Post #2)
    und ​ Dim Pfad_Windows() As String = {"C:\Users\user\Desktop\TEST\", "C:\Users\user\Desktop\TEST 2\"} ist ein String-Array und keine String

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

    Vielleicht so ? Bin selbst ein Noob und weiss nicht was ich tue :D

    VB.NET-Quellcode

    1. Dim Pfad_Windows() As String = {"C:\Users\user\Desktop\TEST\", "C:\Users\user\Desktop\TEST 2\"}
    2. For Each Pfad as String in Pfad_Windows
    3. If IO.Directory.Exists(Pfad) Then
    4. For Each Datei As String In IO.Directory.GetFiles(Pfad)
    5. IO.File.Delete(Datei)
    6. Next
    7. End If
    8. Next
    -... .-.. .- -.-. -.- ... .--. .. -.. . .-.
    The Leading Horse is white - the second horse is red - the third one is a black - the last one is a green.
    Nicht vergessen das Thema als erledigt zu markieren :)
    -... .-.. .- -.-. -.- ... .--. .. -.. . .-.
    The Leading Horse is white - the second horse is red - the third one is a black - the last one is a green.

    Kenaex schrieb:

    Mich würde auch interessieren, warum man alle Dateien (in Ordnern) auf dem Desktop löschen möchte..?


    Jeder hat so seine Gründe und muss doch nicht erklären warum man nach einem Code oder Hilfe fragt.
    Er/Sie hat etwas bestimmtes vor auf dem Desktop und gut ist.

    Vielleicht geht es nicht um dem Desktop sondern einfach nur darum zu wissen wie man Dateien aus mehreren Verzeichnissen löschen kann und der Desktop war einfach nur ein Beispiel.
    -... .-.. .- -.-. -.- ... .--. .. -.. . .-.
    The Leading Horse is white - the second horse is red - the third one is a black - the last one is a green.
    Ja, so ein kleiner Virus.... :thumbsup:

    Nein, alles gut. Ich bin SysAdmin in einer Firma. Unsere Rechner werden im Dauerbetrieb durch temporären Dateien, zum Beispiel im Ordner C:\Windows\Temp\, sehr träge und gerade das immanent wichtige Office-Paket (Excel, Word) ist dann ziemlich lahm. Bisher haben wir die Verzeichnisse immer manuell leer geblasen, den Job sollen die Kollegen nun selbst machen können - per Knopfdruck.

    Ja, ich weiß, es gibt CCleaner etc. , aber sowas ist in der Company nicht gerne gesehen. Deswegen dieser Weg. ;)

    Ich habe seinerzeit in der Uni mit Java mal ein paar Einblicke erhalten und mich nun auf vb.Net festgelegt. Aber wie man sieht, ich lerne noch. ;)

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

    Lico schrieb:

    (...) und mich nun auf vb.Net festgelegt (...)


    Auch wenn ich mittlerweile (berufsbedingt) viel in VB.Net mache, mein Herz gehört C# :) Schau dir das doch mal an. Evtl. kann ich dich ja von der dunklen Seite der Macht überzeugen ;)
    "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."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    Lico schrieb:

    zum Beispiel im Ordner C:\Windows\Temp\

    Ich hoffe dir ist bewusst, dass manche Ordner bestimmte Rechte benötigen, da du aber Sysadmin bist, denke ich wirst du eh als Admin auf dem System angemeldet sein, oder?

    mrMo schrieb:

    Evtl. kann ich dich ja von der dunklen Seite der Macht überzeugen
    psssshhh... erzähl ihm doch nicht von unserem Schwarzmagierkult :D ;)
    Vorallem ist es mit diesem Code nicht möglich alle Unterordner (und wiederum Unterordner) und alle Dateien zu erreichen.

    Das könnte man mit einer eleganten rekursiven Funktion bewerkstelligen. Dazu gibt es bestimmt mehrere Möglichkeiten, wie z.B.
    • Das Durchiterieren eines Verzeichnisses bis zur tiefsten Datei, und von dort aus, dann kontinuierlich alles Löschen, wobei zuerst alle Dateien gelöscht werden, und nachher die Verzeichnisse.
    • Zwei Listen erstellen eines für alle Dateien, und eines für alle Verzeichnisse. Die Liste der Dateien könnte man sofort löschen. Damit die gewährleistung besteht, dass das eine Verzeichnis tiefer als das andere Verzeichnis ist, müsste die Liste der Verzeichnisse vorher nach Pfadlängen sortiert werden. Das könnte man sicher mit lambda machen, mit der Übergabe von zwei Verzeichnispfaden, und der Methode CompareTo. Ab jetzt können auch alles Verzeichnisse gelöscht werden.

    Damit die Zugriffsrechte sauber erkannt werden, müsste vor dem Löschen ein check gemacht werden. Das würde wahrscheinlich mit GetAccessControl, GetAccessRules lösbar sein. Eine eher unsaubere aber sicher auch machbare Lösung wäre der Weg über ein Try.

    Ich denke so würde ich vorgehen.

    Freundliche Grüsse

    exc-jdbi