Verzeichnis bzw. verzeichnisinhalt löschen
-
Hallo,
ich bin noch relativ neu was c++ bzw. visual c++ betrifft. ich bin alelrdings gerade dabei mir eine kleine anwendung für den alltäglichen gebrauch zu schreiben (kleines utility tool).
nun zu meinem problem bzw. meiner frage:
ich habe einen button erstellt über den ich den inhalt eines bestimmten evrzeichnisses löschen will. um es für mein programm explizit auszudrücken, ich möchte per knopfdruck den ordner mit den inetcookies löschen (wie man es aus den eigenschaften des inetexplorers kennt). nun muss ich gestehen habe ich nicht die geringste ahnung wie ich anfangen soll. ich habe schon im inet gegoogelt, auf der microsofthp nachgeschaut, wo ich auch immer wieder kleinigkeiten gefunden habe. geholfen hat mir das bisher aber nicht viel... leider...
ich schaetze mal, das es auch insgesamt nicht all zu schwer ist...
vielleicht ist jemand so nett und kann mir helfen, das wäre super...
danke schonmal im vorraus, ich google mal weiter und versuche mich weiter an meinem kleinen tool...
cu
stefan
-
so, also ein stueck bin ich schonmal weiter...
{ if( remove( "C:\\test.txt" ) == -1 ) perror( "Could not delete 'test.txt'" ); else printf( "Deleted 'test.txt'\n" ); }
wenn ich den button betätige löscht er zumindests chonmal die datei
ich habe im moment aber noch das problem das ich es nicht hinbekomme das ich anstatt der datei nur den pfad eines evrzeichnisses angebe und alle dateien innerhalb des verzeichnisses gelöscht werden..
also quasi anstatt "C:\\test.txt" sollte es bspw. "C:\\Test\" heissen...
wenn mir da noch jemand helfen würde wäre ich sehr dankbar...
grüße
stefan
-
hm, weiß niemand rat? ich probiere schon die ganze zeit, kriegs aber net egbacken den inhalt des verzeichnisses zu löschen.
irgendjemand weiß doch sicher was oder hat ne idee
-
Hallo.
Schau mal in die FAQ
-> http://www.c-plusplus.net/forum/viewtopic-var-t-is-39059.html
-
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