16.19 Datei löschen oder umbenennen – »remove()« und »rename()« 

Manchmal ist es erforderlich, eine Datei zu löschen bzw. diese umzubenennen.
16.19.1 remove() 

Zum Löschen einer Datei können Sie die Funktion remove() verwenden. Die Syntax lautet:
#include <stdio.h> int remove(const char *pfadname);
Bei Erfolg gibt diese Funktion 0 und bei Misserfolg –1 zurück. Voraussetzungen für ein erfolgreiches Löschen sind außerdem der richtige Pfad und auch entsprechende Zugriffsrechte auf die Datei. Hier sehen Sie ein kurzes Beispiel zu remove():
/* a_remover.c */ #include <stdio.h> #include <stdlib.h> int main(void) { char pfad[100]; printf("Welche Datei wollen Sie löschen?\n"); printf("Bitte wenn nötig gültigen Pfad angeben.\n"); printf("Eingabe :> "); scanf("%99s",pfad); if((remove(pfad)) < 0) { fprintf(stderr, "Fehler beim Löschen von %s", pfad); return EXIT_FAILURE; } return EXIT_SUCCESS; }
Hinweis |
Eine kurze Anmerkung bezüglich des absoluten Löschens einer Datei: Wenn eine Datei mit remove() gelöscht wird, geben Sie nur den Speicherplatz frei, also sämtliche Einträge, die zu einer Datei gehören. Aber auf den einzelnen Adressen befinden sich immer noch die Daten, und die lassen sich oftmals wiederherstellen. |
Wollen Sie sichergehen, dass eine Datei nicht mehr wiederhergestellt werden kann, empfiehlt es sich, den Inhalt der Datei zuerst zu »zerstören«, ehe Sie mit remove() die Datei löschen. Der einfachste Weg ist es, den ganzen Inhalt mit irgendwelchen Zeichen zu beschreiben. Im folgenden Beispiel wurde dies mit fwrite() und dem Stringende-Zeichen '\0' durchgeführt:
/* shreeder.c */ #include <stdio.h> #include <stdlib.h> void my_remove(char *rm) { unsigned long size; FILE *rem=fopen(rm, "w+b"); if(rem != NULL) { fseek(rem, 0L, SEEK_END); /* Stream an das Dateiende */ size=ftell(rem); /* Größe in Bytes ermitteln */ /* kompletten Inhalt mit \0 überschreiben */ fwrite((char *)'\0', 1, size, rem); /* damit die Datei gelöscht werden kann, schliessen */ fclose(rem); remove(rm); /* Jetzt weg damit */ } } int main(void) { char datei[] = "test.txt"; my_remove(datei); return EXIT_SUCCESS; }
Jetzt ist es zwar einigen Experten noch möglich, die Datei wiederherzustellen, doch am Inhalt der Datei dürften sich auch diese die Zähne ausbeißen.
Hinweis |
Wollen Sie eine Datei löschen, die im Augenblick geöffnet ist, ist das Verhalten der Funktion remove() implementierungsabhängig. |
16.19.2 rename() 

Mit der Funktion rename() kann eine Datei umbenannt werden. Die Syntax dafür lautet:
#include <stdio.h> int rename(const char *altname, const char *neuname);
Wenn alles richtig verlief, gibt die Funktion 0, ansonsten bei einem Fehler –1 zurück. Ein kurzes Listing zeigt, wie rename() angewendet wird:
/* a_renamer.c */ #include <stdio.h> #include <stdlib.h> int main(void) { char alt[20],neu[20]; printf("Welche Datei wollen Sie umbenennen : "); scanf("%19s",alt); printf("Wie soll die Datei heissen: "); scanf("%19s",neu); if( (rename(alt,neu)) < 0) { fprintf(stderr, "Fehler beim Umbenennen von %s", alt); return EXIT_FAILURE; } return EXIT_SUCCESS; }
Sollte eine Datei umbenannt werden und einen Namen erhalten, der bereits vorhanden ist, ist das Verhalten systemabhängig.
Die Funktionen rename() und remove() funktionieren unter UNIX/Linux-Systemen aber nur, wenn Sie ausreichende Zugriffsrechte für diese Datei besitzen. Unter Windows/MS-DOS ist dies teilweise noch zweitrangig.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.