RemoveDir ohne Erfolg



  • Also so langsam dreh ich durch 😞 :

    ---------------------------
    Fehler beim Löschen der Datei oder des Ordners
    ---------------------------
    Der Ordner Kopie von killme kann nicht entfernt werden: Eine Zugriffsverletzung ist aufgetreten.

    Die Quell- oder Zieldatei ist möglicherweise geöffnet.
    ---------------------------
    OK
    ---------------------------

    Nein, sie ist NICHT geöffnet! Sie steht nur ein einer FileView-Box, die sowieso nicht aktualisiert wird! Und in einem Treeview, das auch auf keine Änderungen reagiert.



  • Ja, woran kann das liegen? An Win2000Prof?
    Wenn in dem Verzeichnis Dateien oder Unterordner sind, werden die brav gelöscht. Die Löschanzeige rattert bis zum Ende durch und da kommt dann die Zugriffsverletzung. Die Abfrage, ob gelöscht werden soll, kommt auch normal.

    @dschensky... hast du deinen letzten Post geändert? Oder hab ich den überlesen? Kann doch fast nicht sein... Sorry.
    Was meinst du mit kotzenden Pferden? Geht doch gar nicht...? Oder wie oder häh? Das Verzeichnis ist leer. Jungfräulich erstellt, extra für den Zweck sich zu opfern.



  • Krass... es liegt tatsächlich an meinem Programm. Es werden da aber nur die Ordner in eine Listview und eine Treeview geschrieben. Aber es besteht doch gar keine Verbindung?!? Ich schreibe es nur am Anfang rein und das wars! Auf Veränderungen (z.B. im Explorer) reagiert das Tool gar nicht.
    Kann man die Verbindung zwischen meinem Tool und den Dateien irgendwie kappen?



  • Plemplem schrieb:

    Krass... es liegt tatsächlich an meinem Programm. Es werden da aber nur die Ordner in eine Listview und eine Treeview geschrieben.

    Mmmmh, das Verzeichnis, welches sich nicht löschen lassen will ist nicht zufällig das zuletzt gefundene oder?...

    -junix



  • Gute Idee, aber es klappt mit KEINEM Verzeichnis. Ich lade es übrigens mit FindFirst. (Stammt auch von hier - FAQ)



  • Zeig mal deine Kot.. äh code...

    -junix



  • 😮 Den GANZEN???
    Also 700 Zeilen will ich hier nicht pasten. Ausserdem würde ich mich blamieren... 🙄 Mach ich mal das wichtigste.

    Also... hier rein.

    void __fastcall TForm1::GetFileList(TList*Liste,String StartDirectory,bool Tree)
    {
      TSearchRec sr;
      String Directory;
      int result = FindFirst((StartDirectory + "*.*").c_str(), faReadOnly|faHidden|faDirectory, sr );
    
      while(result == 0)
      {
        Application->ProcessMessages();
    
        if((sr.Attr & faDirectory)) // ist ein Verzeichnis
        {
          if (sr.Name[1] != '.') // Verzeichnisname ist nicht '.' oder '..', steht
          {                      // also nicht für die höheren Verzeichnisebenen
            if(Tree)
            {
              Directory = StartDirectory + (AnsiString)sr.Name + "\\";
              GetFileList(Liste, Directory,true);
            }
            pFiledata Item = new TFiledata;
            Item->Name = sr.Name;
            Item->Path = StartDirectory;
            Item->Data = sr;
            Liste->Add(Item);
          }
        }
        else  // ist normale Datei
        {
          if(!Tree)
          {
            pFiledata Item = new tFiledata;
            Item->Name = sr.Name;
            Item->Path = StartDirectory;
            Item->Data = sr;
            Liste->Add(Item);
          }
        }
        result=FindNext(sr);
      }
    }
    

    Und hier lösch:

    void __fastcall TForm1::DeleteDirectory(AnsiString Path)
    { //http://www.winapi.net/index.php?inhalt=s21
        TCHAR lpszPath[MAX_PATH];
        SHFILEOPSTRUCT shfs; // hier kommt rein was zu tun ist..
    
        // erst die Struktur füllen
        shfs.hwnd   = NULL;
        shfs.wFunc  = FO_DELETE; // Löschen wollen wir ;)
    
        lstrcpy(lpszPath, Path.c_str());
        lpszPath[lstrlen(lpszPath) + 1] = '\0';
        shfs.pFrom  = lpszPath;
        shfs.pFrom = "D:\\killme\0";//DEBUG!!!
    
        shfs.pTo    = NULL;
        shfs.fFlags = FOF_SIMPLEPROGRESS ; // den Benutzer ein Fortschrittsfenster anzeigen
        shfs.lpszProgressTitle = "Fortschritt des Löschvorgangs"; // Text dieses Fensters
    
        // Löschvorgang durchführen
        int Fehler = SHFileOperation (&shfs);
        ShowMessage(IntToStr(Fehler));
    }
    

    Hoffentlich wirst du damit schlau... ich komm ja nicht mehr mit...
    Falls du noch was brauchst, einfach klingeln. (Übrigens: Danke!)



  • Mach mal am Ende von GetFileList noch einen FindClose.

    Gruss Chris



  • Das sollte mal jemand in den FAQ verbessern. Bin da nämlich vor nem Jahr auch drauf rein gefallen und konnte mein Verzeichnis nicht verschieben...
    Hat mich viel Zeit gekostet, den Fehler zu finden.

    Gruß,
    Phips!



  • BINGO!!! 😃 Esklapptesklapptesklappt!!!

    Kommt vorbei, ich geb einen aus!

    Könnte nun bitte ein Mod die FUCK korrigieren?


Anmelden zum Antworten