IOException beim Verzeichnis löschen

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von fichz.

    IOException beim Verzeichnis löschen

    yo Leute,

    hab ein etwas doofes Problem und hoffe, dass vielleicht jemand dafür eine Lösung haben könnte.
    Ich bekomme ab und zu beim Verzeichnis löschen eine IOException. Lt. MSDN msdn.microsoft.com/en-us/library/fxeahc5f.aspx kann das sein, dass eventuell noch ein Handle auf dem/der Verzeichnis/Datei draufliegt.
    Das Problem tritt nur auf Win2k und XP Rechnern auf (was ja auch auf MSDN steht).

    Ich habe nun schon einige Lösungen versucht (Direcotry.Delete, Rekursive zuerst alle Dateien, SyncLock, usw...)

    Leider weiß ich nicht mehr wirklich weiter.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Du könntest eine Batch-Datei generieren und die über Process.Start() ausführen.
    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: Funktioniert nicht. Meldung, dass eine Datei im Zugriff ist.
    @StormySunshine: Dem bin ich anhand der Fehlermeldung nachgegangen.

    Ich weiß auch wann die Meldung kommt.
    Hintergrund: Ein Sicherungstool welches täglich von gewissen Verzeichnissen eine Sicherung erstellt (als .Zip Datei). Der Tag des Ordner heißt Mo, Di, Mi, ...
    Nach einer Woche (heute Di) wird das Verzeichnis Di gelöscht und neu angelegt mit den gewählten Sicherungsordner/datein.
    Das Tool beinhaltet auch eine Wiederherstellungsoption. Hierbei hab ich mir eine simple Klasse gebastelt.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class RestoreEntry
    2. Private _ZipDatei As FileInfo
    3. Private _ZielOrdner As DirectoryInfo
    4. Private _Überschreiben As Boolean
    5. Private _Passwort As String
    6. ''' <summary>
    7. ''' Zip Datei welche extrahiert werden soll
    8. ''' </summary>
    9. ''' <value></value>
    10. ''' <returns></returns>
    11. ''' <remarks></remarks>
    12. Public Property ZipDatei() As FileInfo
    13. Get
    14. Return _ZipDatei
    15. End Get
    16. Set(ByVal value As FileInfo)
    17. _ZipDatei = value
    18. End Set
    19. End Property
    20. ''' <summary>
    21. ''' Gibt den Zielordner an wohin die Zip Datei extrahiert werden soll
    22. ''' </summary>
    23. ''' <value></value>
    24. ''' <returns></returns>
    25. ''' <remarks></remarks>
    26. Public Property ZielOrdner() As DirectoryInfo
    27. Get
    28. Return _ZielOrdner
    29. End Get
    30. Set(ByVal value As DirectoryInfo)
    31. _ZielOrdner = value
    32. End Set
    33. End Property
    34. ''' <summary>
    35. ''' Gibt an ob Dateien im Zielverzeichniss überschrieben werden sollen
    36. ''' </summary>
    37. ''' <value></value>
    38. ''' <returns></returns>
    39. ''' <remarks></remarks>
    40. Public Property Überschreiben() As Boolean
    41. Get
    42. Return _Überschreiben
    43. End Get
    44. Set(ByVal value As Boolean)
    45. _Überschreiben = value
    46. End Set
    47. End Property
    48. ''' <summary>
    49. ''' Passwort des Zip-Archivs
    50. ''' </summary>
    51. ''' <value></value>
    52. ''' <returns></returns>
    53. ''' <remarks></remarks>
    54. Public Property Passwort() As String
    55. Get
    56. Return _Passwort
    57. End Get
    58. Set(ByVal value As String)
    59. _Passwort = value
    60. End Set
    61. End Property
    62. ''' <summary>
    63. ''' Erstellt eine neue Instanz
    64. ''' </summary>
    65. ''' <param name="ZipDatei">Zip Archiv welches extrahiert werden soll</param>
    66. ''' <param name="ZielOrdner">Ziel Verzeichniss</param>
    67. ''' <param name="Überschreiben">Flag ob Zieldateien überschrieben werden sollen</param>
    68. ''' <remarks></remarks>
    69. Public Sub New(ByVal ZipDatei As FileInfo, ByVal ZielOrdner As DirectoryInfo, ByVal Überschreiben As Boolean)
    70. Me.New(ZipDatei, ZielOrdner, Überschreiben, "")
    71. End Sub
    72. ''' <summary>
    73. ''' Erstellt eine neue Instanz
    74. ''' </summary>
    75. ''' <param name="ZipDatei">Zip Archiv welches extrahiert werden soll</param>
    76. ''' <param name="ZielOrdner">Ziel Verzeichniss</param>
    77. ''' <param name="Überschreiben">Flag ob Zieldateien überschrieben werden sollen</param>
    78. ''' <param name="Passwort">Passwort des Zip-Archivs</param>
    79. ''' <remarks></remarks>
    80. Public Sub New(ByVal ZipDatei As FileInfo, ByVal ZielOrdner As DirectoryInfo, ByVal Überschreiben As Boolean, ByVal Passwort As String)
    81. Me.ZipDatei = ZipDatei
    82. Me.ZielOrdner = ZielOrdner
    83. Me.Überschreiben = Überschreiben
    84. Me.Passwort = Passwort
    85. End Sub
    86. End Class


    Wird nun in Zip aus einem OpenFileDialog und ein Destination Folder ausgewählt (dies geschieht in einer modalen Form welche mit Using erstellt wird ), füge ich diesen Restore Entry einem Dictonary hinzu.
    Sobald ich das gemacht habe, meckert das nächste Backup mit dieser IOException, dass eine Datei im Zugriff ist (das gewählte Zip).

    Ich mache aber ansich nichts damit ausser das halt dieses FileInfo-Objekt von diesem Zip erstellt wurde.
    Versuche ich das Dictonary zu leeren, vor der Sicherung, bewirkt das leider auch nichts...

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten