Datei mit umbennen wenn Sonderzeichen
-
hallo...,
ich habe da ein kleines problem.
ich moechte unter unix ein verzeichniss mit unterverzeichnissen durchsuchen und alle dateinamen die ein sonderzeichen wie ";:?/\=" haben durch einen _ ersetzen.ich brauche hilfe in z.b.: wie kann ich die verzeichnisse durchsuchen und dann die dateinamen ersetzen?
zum schluss soll das programm auch ausgeben wie viele und welche sonderzeichen ersezt wurden.
dank vorab
uwe
-
Hi
Schau dir mal den Header dirent.h an. Da steht alles drin was benötigst.
-
hallo...
das mit den verzeich nis einlesen klapt schon... aber wie bekomme ich jetzt die sonder zeichen ersezt?
#include <sys/types.h> #include <dirent.h> #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { DIR *dir; struct dirent *dirzeiger; if(argc != 2) { fprintf(stderr,"Benutzung : %s Directory\n",argv[0]); exit (1); } /*Wir oeffnen ein Verzeichnis mit opendir*/ if((dir=opendir(argv[1])) == NULL) { fprintf(stderr,"Fehler bei opendir.....\n"); exit (1); } /*Wir lesen aus unserem Verzeichnis mit readdir*/ while((dirzeiger=readdir(dir)) != NULL) printf("%s\n",(*dirzeiger).d_name); /*Wir setzten den "Lesezeiger" dir wieder an den Anfang*/ rewinddir(dir); /*Wir lesen erneut das Verzeichnis*/ while((dirzeiger=readdir(dir)) != NULL) printf("%s\n",(*dirzeiger).d_name); /*Wir beenden und schließen den "Lesezeiger" dir*/ if(closedir(dir) == -1) printf("Fehler beim Schließen von %s\n",argv[1]); return 0; }
mfg uwe
-
Original erstellt von uwemd:
das mit den verzeich nis einlesen klapt schon... aber wie bekomme ich jetzt die sonder zeichen ersezt?Die Funktion strpbrk ist dein Freund. In etwa sollte das so aussehen:
char *p; while (p = strpbrk(dateiname, ";:?/\=")) *p = '_';
-
hi..
aber er bennet doch dann die datei nicht um...!
-
Richtig, das geht mit rename.
-
hi..
also wenn ich das richtitg verstanden habe mich ich es so:
while((dirzeiger=readdir(dir)) != NULL) { //" (*dirzeiger).d_name <- Hier steht ja der Dateiname drin char *p; while (p = strpbrk(",(*dirzeiger).d_name, ";:?/\=")) *p = '_'; rename((*dirzeiger).d_name, p); }
aber er macht nichts... vielleicht kannst du mir diese funktion als beispiel geben...
mfg uwe
-
Einen 'ausreichend großen' Zwischenpuffer anlegen und den Namen dort hinenkopieren. Die von mir angegebene Prozedur auf den Puffer anwenden und schließlich den alten Dateinamen und den neuen als Parameter von rename benutzen.
-
hi...
ich habe so gut wie nichts verstanden...
mfg uwe
-
#include <stdio.h> #include <limits.h> void chname(char const *file) { char buf[NAME_MAX]; char *p = buf; char const *q = file; while (*q) { if (strchr(";:_§$%", *q)) *p = '_'; else *p = *q; ++q; ++p; } *p = '\0'; rename(file, buf); }
-
hallo...
also das beispiel verstehe ich nicht.
vielleicht koenntest du das mal an hand von meinem beispiel zeigen also wie ich das verzeichniss auslese..
danke uwe
-
/* chname() - wie von Daniel E. vorgeschlagen */ /* ... */ while ((dirzeiger = readdir(dir)) != NULL) { chname(dirzeiger->d_name); } /* ... */
-
hallo....
dank an euch allen...
es funzt jetzt...
mfg uwe