Problem Beim löschen eines Ordners



  • Guten Morgen!

    Nachdem ich das Problem vor mich hingeschoben habe und mich heute Morgen nochmals damit beschäftigt habe, versuche ich nun hier Hilfe zu bekommen.

    Folgendes:
    Ich habe einen Ordner mit einigen Files.
    Den Ordner mit Files möchte ich löschen.
    Soweit kein problem.
    Files bekomme ich ohne Probleme gelöscht.
    Wenn es aber darum geht, den Ordner zu löschen bekomme ich folgenden Fehler:

    System.IO.IOException: The process cannot access the file 'C:\TEMP\C03708\' because it is being used by another process.
       at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
       at System.IO.Directory.DeleteHelper(String fullPath, String userPath, Boolean recursive)
       at System.IO.Directory.Delete(String fullPath, String userPath, Boolean recursive)
       at Test.clear() in d:\projects\ueben\ueben\test.cpp:line 340
    

    Line 340 ist:

    Directory::Delete(localPath); //localpath = C:\\TEMP\\C03708
    

    Das einzigste was ich mit dem pfad noch mache ist vor dem löschen der dateien mit Exists abzufragen, ob der pfad überhaupt existiert.

    An was kann sowas liegen?

    Viele Grüße



  • Bin zwar selbst neu auf dem Gebiet, aber vielleicht könnte etwas in dieser Form hier abhilfe schaffen. Das habe ich benutzt um festzustellen, ob ich Schreibrechte auf ein Verzeichnis habe, funktioniert auch soweit. Was allerdings passiert, wenn ich zwar prinzipiell Schreibrechte habe, die Datei oder das Verzeichnis aber in Verwendung ist, weiß ich nicht.

    DirectoryInfo* di = new DirectoryInfo("Verzeichnis");
    if((di->Attributes & (FileAttributes::System | FileAttributes::ReadOnly)) != 0)
    			{
    				MessageBox("Zugriff auf das Verzeichnis verweigert", "Warnung", MB_OK);
    }
    

    Die Attribute, die es gibt, findet man hier:

    http://msdn2.microsoft.com/de-de/library/system.io.fileattributes(VS.80).aspx

    Leider ist da aber kein Attribut dabei, das anzeigt, ob die Datei oder der Ordner in Verwendung ist, zumindest sehe ich keins. 😞

    EDIT: Du musst wahrscheinlich irgendwie die Exception abfangen, die ausgelöst wird, wenn das Programm keine Zugriffsrechte hat. Wie das genau geht, weiß ich leider nicht. Bin leider absoluter Anfänger auf dem Gebiet. Würde mich auch interessieren, wie das gemacht wird.



  • Erstmal danke für deine Tip

    Aber irgendwie will ich nciht verstehen, wie deine Abfrage funktioniert.
    ein einfaches & ist ja kein vergleichsoperator (&&) sondern zum abfragen der speicherposition (&pointer)
    auch != 0 will bei mir nicht, kann die werte so nicht vergleichen.
    Habs versucht umzuschreiben, bin aber daran gescheitert.
    habe mal aus juck ein ordner per hand erstellt und dann per programm löschen lassen.
    Das funktionierte.

    Wie gesagt lassen sich auch die dateien darin problemlos löschen.
    ordner und dateien werden vom programm erstellt. verarbeitet und wieder gelöscht.
    nur das löschen des ordners macht probleme.

    jemand noch eine idee?



  • JamesR schrieb:

    Erstmal danke für deine Tip

    Aber irgendwie will ich nciht verstehen, wie deine Abfrage funktioniert.
    ein einfaches & ist ja kein vergleichsoperator (&&) sondern zum abfragen der speicherposition (&pointer)
    auch != 0 will bei mir nicht, kann die werte so nicht vergleichen.
    Habs versucht umzuschreiben, bin aber daran gescheitert.
    habe mal aus juck ein ordner per hand erstellt und dann per programm löschen lassen.
    Das funktionierte.

    Wie gesagt lassen sich auch die dateien darin problemlos löschen.
    ordner und dateien werden vom programm erstellt. verarbeitet und wieder gelöscht.
    nur das löschen des ordners macht probleme.

    jemand noch eine idee?

    Dast ist auch kein Vergleichsoperator, sondern eine UND-Verknüpfung um ein einzelnes Flag abzufragen. 😉 Und dann wird gefragt, ob dieses Flag ungleich 0 ist.


Anmelden zum Antworten