Löscht keine Datein mit system("del Pfad"); ... ??? Warum ???



  • Hallo,

    ich habe da ein problem, ich möchte nämlich den Inhalt des Temp Ordners löschen ! Aber wenn ich den Befehl system("del C:\\Dokumente und Einstellungen\...\\Lokale Einstellungen\\Temp\*.*"); ausführe, dann sagt er mir das er den Pfad nicht finden kann !!! Woran kann das Liegen ? Der Temp Ordner bzw. der Inhalt ist doch nicht Versteckt o.ä. ...? oder ? 😕

    Vielen Dank
    :: NoName ::



  • Hast du schon mal versucht den Befehl einfach so in der Eingabeaufforderung auszuführen? Ich vermute, dass die Leerzeichen bei den Verzeichnissen Probleme machen.

    Es gäbe übrigens auch eine andere Lösung (Eine Lösung mit system() ist nie so wirklich gut). Schau dir mal die Syntax zu FindFirstFile(), FindNextFile() (-> MSDN) und remove() an. 😉



  • Tatsache, wenn ich system(...) in der Eingabeaufforderung eingebe, dann sagt er auch das er den Pfad nicht findet !!! ...mhhh und mit remove(); geht es auch nicht !...hab schon alles versucht ! was kann ich den machen gegen die Leerzeichen ?

    meinst du das mit FindFirstFile etc. : (das ist nämlich mein Quellcode den ich bis jetzt geschrieben habe um den Temp Inhalt zu löschen !):

    #include <windows.h> 
    #include <iostream.h> 
    #include <stdio.h>
    #include <cstdio> 
    
    int main() 
    { 
        HANDLE fHandle; 
        WIN32_FIND_DATA wfd; 
    
        fHandle=FindFirstFile("c:\\Dokumente und Einstellungen\\...\\Lokale Einstellungen\\Temp\\*.tmp",&wfd); 
    
        while (FindNextFile(fHandle,&wfd)) 
        { 
            if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
            {
    
            } 
    		else
    		{
    			cout << "DateiName:...  " << wfd.cFileName << endl;
    			system("del c:\\Dokumente und Einstellungen\\...\\Lokale Einstellungen\\Temp\\*.*");
    
    		}
        } 
        FindClose(fHandle); 
        return 0; 
    }
    

    Die Befehle hab ich schon benutzt ! Aber mit FindFirstFile usw. kann man doch keine Dateien löschen...??? Verstehe nicht was du meinst...



  • Mit FindFirstFile() startest du eine Dateisuche. Zurückgegeben wird dir normalerweise auch der Dateiname der gefundenen Datei. Diesen Dateinamen musst du bei remove() angeben. Mit FindNextFile() erhältst du die nächste Datei deiner Dateisuche.

    Also anstatt deinem system(...) musst du remove(wfd.cFileName); verwenden. Das musst du übrigens auch schon nach FindFirstFile() sonst wird die erste gefundene Datei nicht gelöscht.



  • Hi AJ,

    Ich weiss nicht genau wo ich das remove(); nach FindFirstFile hinschreiben soll ...(?) Mein momentaner Code ist folgender :

    #include <windows.h> 
    #include <iostream.h> 
    #include <stdio.h>
    
    int main() 
    { 
        HANDLE fHandle; 
        WIN32_FIND_DATA wfd; 
    
    	fHandle=FindFirstFile("C:\\Dokumente und Einstellungen\\...\\Lokale Einstellungen\\Temp\\*.tmp",&wfd); 
    	remove(wfd.cFileName);   // <- ist das richtig ?
    
        while (FindNextFile(fHandle,&wfd)) 
        { 
            if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
            {						
            } 
    		else
    		{
    			cout << "DateiName :...  " << wfd.cFileName << endl;
    			remove(wfd.cFileName);
    		}
        } 
        FindClose(fHandle); 
        return 0; 
    }
    

    Stimmt das so ? Er löscht nämlich keine Dateien im temp Ordner ...



  • Du übergibst remove nur den Dateinamen, nicht aber den gesamten Pfad.
    Lass Dir mal den Inhalt von wfd.cFileName ausgeben, dann siehst Du es.
    Deswegen findet der Computer die Datei(en) jedenfalls nicht und kann sie nicht löschen.

    Ansonsten sollte das so funktionieren.



  • ja, aber ich möchte ja nicht eine Datei löschen sondern mehrere ! Und da ich ja nicht den Namen von allen weiss, kann ich nur den Pfad angeben mit *.tmp ! Oder verstehe ich dich falsch ...? (vielleicht könntest du mir ein Codebeispiel geben ...?)



  • Das Problem liegt darin, dass Du remove() nur den Dateinamen übergibst, nicht aber den Pfad. Deshalb denkt der Computer, dass die Datei im derzeitigen Arbeitsverzeichnis liegt, was in diesem Fall das Verzeichnis sein dürfte, in dem das Programm ausgeführt wird. Dort befindet sich die Datei, die Du eigentlich löschen willst, natürlich nicht. Das Problem kannst Du mit einer der folgenden Möglichkeiten "beheben":

    1. Möglichkeit: Du setzt das Verzeichnis, in dem zu löschenden Dateien liegen als Arbeitsverzeichnis, bevor Du versuchst eine Datei zu löschen.

    ...
    SetCurrentDirectory("C:\\Dokumente und Einstellungen\\...\\Lokale Einstellungen\\Temp\\");
    ...
    remove(wfd.cFileName);
    

    2. Möglichkeit: Du gibst beim Aufruf von remove() immer den gesamten Pfad an:

    ...
    string path = "C:\\Dokumente und Einstellungen\\...\\Lokale Einstellungen\\Temp\\";
    ...
    remove((path + wfd.cFileName).c_str());
    

Anmelden zum Antworten