vollen ordner löschen



  • hallo ihr lieben,

    wer kann mir meinen heute abwesenden mentor ersetzten? (bin blutigster c-anfänger)

    folgendes problem: ich habe einen mit einer variablen anzahl von dateien gefüllten ordner, den will ich komplett mit inhalt löschen. mit rmdir kann ich nur einen leeren ordner löschen, wie kann ich ihn davor also sinnvoll entleeren?
    hab schon eine (etwas unschöne) lösung: ich übergebe den löschbefehl der console.

    /*variable mit Adresse der zu startenden oder löschenden Datei*/
    char dateiname[1000];

    /* Pfad des Verzeichnisses, in dem das Programm läuft, meist der temp-ordner*/
    char loescherverzeichnis[1000];

    /* blabla, loescherverzeichnis wird gefüllt*/

    sprintf (dateiname,"rd /s /q %sderordner",loescherverzeichnis);
    system (dateiname);

    klappt super, aber die console blitzt nun kurz auf - hässlich!
    gibts ne andere schönere sauberere möglichkeit mit c?



  • Mit ANSI-C fällt mir auch nichts besseres ein, wenns auch etwas neben dem Pfad der Gläubigen sein darf gibts natürlich Möglichkeiten.

    Das wär dann aber OS-abhängig.

    Gewünscht oder nicht gewünscht?

    MfG SideWinder



  • ist schnupps, weils ganze programm für windows gedacht ist. haste eine idee, wie man die console einfach unsichtbar machen kann?
    gruß, miluu



  • hallo SideWinder!

    hat sich erledigt, mein grandioser mentor war endlich hier und hat mir das da gezeigt:

    void OrdnerKill (char *loescherverzeichnis)
    {
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind;
    char dateiname[1024];

    sprintf (dateiname,"%sderordner\*.*",loescherverzeichnis);

    hFind = FindFirstFile(dateiname, &FindFileData);

    for (; ; )
    {
    if (hFind == INVALID_HANDLE_VALUE)
    {
    /*printf ("Invalid File Handle. GetLastError reports %d\n", GetLastError ());*/
    break;
    }
    else
    {
    /*printf ("The first file found is %s\n", FindFileData.cFileName);*/
    if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    {
    /*printf ("ordner !!!!!") ;*/
    }
    else
    {
    char dateiloeschen[1024];
    sprintf (dateiloeschen,"%sderordner\%s",loescherverzeichnis,FindFileData.cFileName);
    /* printf ("loesche %s \n",dateiloeschen);*/
    /*MessageBox(0,dateiloeschen,0,MB_OK);*/
    remove (dateiloeschen);
    }
    }
    if (FindNextFile(hFind,&FindFileData)==0)break;
    }
    FindClose(hFind);

    sprintf (dateiname,"%s%s",loescherverzeichnis,"\\derordner");
    rmdir (dateiname,0);
    /*MessageBox(0,"Ordener gelöscht",0,MB_OK); */
    }

    edel, oder?

    schönen tag noch,

    miluu



  • Dieser Thread wurde von Moderator/in Shade Of Mine aus dem Forum ANSI C in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Mit SHFileOperation() kann man glaube ich auch direkt nen kompletten Ordner mitsamt Inhalt löschen...



  • Hallo,

    geeky schrieb:

    Mit SHFileOperation() kann man glaube ich auch direkt nen kompletten Ordner mitsamt Inhalt löschen...

    Jupp, das geht:

    BOOL DelDir(const char *dir)
    {
    	SHFILEOPSTRUCT fos;
    
    	ZeroMemory(&fos, sizeof(fos));
    
        fos.wFunc  = FO_DELETE;
        fos.fFlags = FOF_SILENT | FOF_NOCONFIRMATION;
        fos.pFrom  = dir;
    
    	return (SHFileOperation(&fos) == 0);
    }
    

    MfG
    tuküe


Anmelden zum Antworten