Verzeichnis bzw. verzeichnisinhalt löschen



  • danke, es klappt nun soweit, nur muss ich jetzt fuer mein vorhaben noch eine ausnahme deklarieren damit die fehlermeldung für das löschen der index.dat übergangen wird... ma guckn ob ich das noch hinkriegen werde 🙂



  • so, also ich komme nun nicht mehr weiter, vielleicht hat jemand von euch eine idee...

    das ist der code mit dem ich arbeite:

    löschfunktion

    void DELdir() 
    {
    
    SHFILEOPSTRUCT myFileOp; 
    ZeroMemory(&myFileOp, sizeof(myFileOp)); 
    myFileOp.hwnd = 0; 
    myFileOp.wFunc =FO_DELETE  ; 
    // Hier der Ordner 
    CString Path = "C:\\Dokumente und Einstellungen\\...\\Temporary Internet Files\\*.*";
    Path = Path + '\0';
    myFileOp.pFrom = Path;
    // Hier kommt ob oder wie ein Dialog angezeigt wird. 
    myFileOp.fFlags = FOF_NOCONFIRMATION ; 
    myFileOp.lpszProgressTitle = "Delete Ordner"; 
    SHFileOperation(&myFileOp); 
    
    //FOF_SILENT -> keine progress anziege 
    //FOF_ALLOWUNDO -> in papierkorp ! 
    //FOF_NOERRORUI -> keine meldungen anzeigen 
    //FOF_NOCONFIRMATION -> auf alles mit JA antworten, wie z.B. "Wollen Sie diesen Ordner löschen ?" 
    //wenn kein flag erwüncht -> fFlags = 0;
    

    und damit rufe ich die funktion auf...

    void CProjektUtilityToolDlg::OnInetdateien() 
    {
    	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
    
    	///////////////////////
    	//EIGENER CODE ANFANG//
    	///////////////////////
    
    	DELdir();
    
    	///////////////////////
    	///EIGENER CODE ENDE///
    	///////////////////////	
    
    }
    

    klappt auch alles...
    aber:
    da ich den ordner mit den cookies löschen möchte, habe ich ein problem, die datei index.dat lässt sich nciht löschen... es gibt eine fehlermeldung und keine der dateien wird gelöscht...

    hat jmd eine idee?



  • Die index.dat kann man nicht löschen, weil Windows das nicht zulässt.
    Du musst den Code also so umschreiben, dass dein Programm nicht versucht, diese Datei zu löschen.



  • ja, das meine ich ja, ich habe mir schon angeguckt wie man ausnahmen erstellt, muss aber gestehen, dass ich da trotz probieren nicht sehr weit gekommen bin...

    meine erste idee war, die fehlermeldung zu unterdrücken, das er diese quasi übergeht und wenigstens den rest löscht... aber das war zu einfach gedacht 😕

    mir fehlt im moment der ansatz... ich tüftel allerdings weiter, nun bin ich soweit gekommen wie ich wollte, dann stoppt mich das auch nicht...

    aber vielleicht hat jemand einen ansatz... das wäre mir schon ne große hilfe...



  • Wo in deinem Code gibst du an, was gelöscht werden soll?

    Ich vermute, dass es da reichen würde, einfach . in *.txt zu wandeln und dann lässt der die *.dat auch in Frieden. 😉



  • SetCurrentDirectory("C:\\Dokumente und Einstellungen\\..\\Cookies\\");
    	CFileFind finder;
    	BOOL bWorking = finder.FindFile("*.*");
    	while (bWorking)
    	{
    		if(finder.GetFileName()!="index.dat")
    			DeleteFile(finder.GetFileName());
    		bWorking = finder.FindNextFile();
    	}
    


  • estartu schrieb:

    Wo in deinem Code gibst du an, was gelöscht werden soll?

    Ich vermute, dass es da reichen würde, einfach . in *.txt zu wandeln und dann lässt der die *.dat auch in Frieden. 😉

    So geht's auch



  • also für die cookies klappt es...

    bleibt allerdings das problem wenn ich das ganze auf den ordner temporary internetfiles anwenden möchte (oder auf den verlaufsordner)...

    da bleibt mir das ausgrenzen der index.dat nicht erspart...



  • So, jetzt ist mein Code fehlerfrei. 🙂



  • ja, nun kann ich fehlerfrei die datei ausführen, allerdings sobald ich auf den button zum löschen klicke schmiert das programm ab...

    kann ich den code den du eben gepostet hast ohne weiteres anstatt dem befehl "DELdir();" schreiben?

    bin mir grade so ziemlich unsicher wo ich den überhaupt einbauen muss...
    schaem 😞



  • Stell dein Projekt auf Release und alles sollte klappen
    (Build->Configuration).
    Du kannst deinen alten Code auskommentieren und meinen in deine Funktion kopieren.



  • auf die gefahr dass ich mich jetzt unbeliebt mache... aber das höre ich zum ersten mal...

    was meinst du damit und wie mache ich das?



  • also, das funzt bei mir nicht, ich habe das umgestellt, von debug auf release... fehler bleibt...

    glaube der springt a) immer wieder nach debug um, also habe ich b) debug einfach ma gelöscht... der fehler bleibt un beim kompilieren gibts nun auch ne fehlermeldung...



  • bloom schrieb:

    der fehler bleibt

    Was für ein Fehler?

    un beim kompilieren gibts nun auch ne fehlermeldung...

    Und welche? 🙄



  • Hier nochmal den finalen Code:

    SetCurrentDirectory("C:\\Dokumente und Einstellungen\\...\\Cookies\\");  // Hier den Pfad
        CFileFind finder;
        BOOL bWorking = finder.FindFile("*.*");
        while (bWorking)
        {
    	    bWorking = finder.FindNextFile();
            if(finder.GetFileName()!="index.dat")
                DeleteFile(finder.GetFileName());        
        }
    

    Das klappt bei mir auch mit Debug.



  • Wenn Du den Rückgabewert von "DeleteFile" ignorierst, dann kannst Du die Abfrage auf den Dateinamen auch gleich ganz weglassen ... :p


Anmelden zum Antworten