Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » Ordner leeren, ios::trunc

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
04.01.2007, 11:32 Uhr
~Anfängerin
Gast


Hallo,

ich habe folgendes Problem: Und zwar möchte ich in meinem Programm einen bestimmten Ordnerinhalt löschen bzw. den ganzen Ordner.
Löschen würde ich ihn mit rmdir, falls er leer ist.
Wie kann ich es nun erreichen, dass mein Ordner leer ist? Kann dieses mit ios::trunc erfolgen? Ich habe dies getestet, leider klappte das nicht.

Lg
Kleine
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.01.2007, 13:02 Uhr
virtual
Sexiest Bit alive
(Operator)


Nein,

ordner löscht man mit dem befehl rmdir (man 2 rmdir), Dies geht schief, wenn der ordner nicht leer ist. daher würde man zunächst den Inhalt des Ordners löschen. Man kann es zB so machen:


C++:
#include <sys/types.h>
#include <sys/stat.h>
#include <limits.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <dirent.h>
#include <strings.h>

int delete_file_or_dir(const char* path) {
    static struct stat info;
    char buffer[PATH_MAX];
    int unlink_err;
    struct dirent** entries;
    int entry_count;
    int i;

    /* Firstly simply try an unlink. If it not works, we have examine the cause */
    if (0 == unlink(path)) {
        return 0;
    }
    unlink_err = errno;

    /* Get information about file */
    if (0 != stat(path, &info)) {
        perror("stat");
        return -1;
    }

    /* If it is no0 directory, the prev. unlink had to work. */
    if (!S_ISDIR(info.st_mode)) {
        errno = unlink_err;
        perror("unlink");
        return -1;
    }

    /* If we are here, it is for sure a directory, delete its entries. */
    entry_count = scandir(path, &entries, NULL, alphasort);
    if (entry_count<0) {
        perror("scandir");
        return -1;
    }

    for(i=0; i<entry_count; ++i) {
        if (0==strcmp(entries[i]->d_name, ".") || 0==strcmp(entries[i]->d_name, "..")) {
            continue;
        }
        strcpy(buffer, path);
        strcat(buffer, "/");
        strcat(buffer, entries[i]->d_name);

        if (0 != delete_file_or_dir(buffer)) {
            free(entries);
            return -1;
        }
    }

    /* Cleanup */
    free(entries);

    /* Delete the empty directory. */
    if (0 != rmdir(path)) {
        perror("rmdir");
        return -1;
    }

    return 0;
}




Wesentlich ist dabei, daß´die Funktion rekursiv arbeitet: Findet man im Verzsichnis also ein unterverzeichnis, ruft sie sich dafür selbst nochmals auf.

Vorsicht: Die Funktion macht de facto ein rm -rf !
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: