Mehrer Files umbennen
-
Wieso fkt. dieser Code nicht
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <dirent.h> int listdir(const char *path) { struct dirent *entry; DIR *dp; dp = opendir(path); if (dp == NULL) { perror("opendir: Path does not exist or could not be read."); return -1; } while((entry = readdir(dp))) puts(entry->d_name); closedir(dp); return 0; } int main(int argc, char **argv) { char neu[300]; int listdir(argv[1]); printf("Wie sollen die Dateien umbenannt werden:\n"); scanf("%c",neu); for(int item = 1; item<argc; item++) { rename(entry->d_name,neu); } return 0; }
Gruß,
Averroes
-
Averroes schrieb:
Wieso fkt. dieser Code nicht
Bei der Fehlerbeschreibung: Weil du einen Fehler gemacht hast.
Trotzdem:
%c bei scanf liest nur ein Zeichen ein.
Für eine Zeichenkette wäre %s sinnvoller.
Allerdings liest das nur bis zu einem Leerzeichen.
-
In Zeile 26 beim Funktionsaufruf weist du den Rueckgabewert nicht
wirklich einer Variablen zu, da steht einfach nur int vor.Und in Zeile 30 deklarierst du in einer for-Schleife eine neue
Variable. In C89 geht das nicht (in C99 weiss ich nicht).
-
Aber ich bekomme immernoch Fehlermeldung für diesen Code
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <dirent.h> int listdir(const char *path) { struct dirent *entry; DIR *dp; dp = opendir(path); if (dp == NULL) { perror("opendir: Path does not exist or could not be read."); return -1; } while((entry = readdir(dp))) puts(entry->d_name); closedir(dp); return 0; } int main(int argc, char **argv) { char neu[300]; int listdir(argv[1]); printf("Wie sollen die Dateien umbenannt werden:\n"); scanf("%s",neu); for(int item = 1; item<argc; item++) { rename(entry->d_name,neu); } return 0; }
und zwar folgende:
26: error: invalid conversion from 'char' to 'int'
32: error: 'entry' was not declared in this scopeGruß,
Averroes
-
Die Struktur existiert nur in der Funktion listdir(). Nach Beenden
der Funktion kannst du von main() aus nicht mehr darauf zugreifen.
Also musst du entweder das Umbenennen in der Funktion machen oder
die Struktur in main() definieren und der Funktion als Argument geben.
-
for(int item = 1; item<argc; item++)
was willst du mit argc genau machen?
Du weisst schon, dass argc die Anzahl Argumente sind die du dem Programm mitgibst?#include <stdio.h> #include <stdlib.h> #include <string.h> #include <dirent.h> int listdir(const char *path) { struct dirent *entry; char neu[256]; int iIndex=0; DIR *dp; dp = opendir(path); if(dp == NULL) { perror("opendir: Path does not exist or could not be read."); return(-1); } printf("Wie sollen die Dateien umbenannt werden:\n"); scanf("%s",neu); while((entry = readdir(dp)),iIndex++) { sprintf(&neu[strlen(neu)],"%d",iIndex); rename(entry->d_name,neu); } closedir(dp); return(0); } int main(int argc, char **argv) { if(listdir(argv[1])<0) printf("listdir faild\n"); return(0); }
Ungetestet...
-
Binggi schrieb:
while((entry = readdir(dp)),iIndex++) { sprintf(&neu[strlen(neu)],"%d",iIndex); // Da ist immer das aktuelle neu drin rename(entry->d_name,neu); }
Ungetestet...
Das gibt sowas für Datei.txt
Datei.txt1 Datei.txt12 Datei.txt123
Immer noch besser als alle Dateien mit dem selben Namen zu belegen.
-
Schande über mich...
So nun etwas mehr überlegt,xD
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <dirent.h> int listdir( char *path) { struct dirent *entry; char temp_neu[256]; char neu[256]; char old[256]; int iIndex=0; char *firstPart,*secoundPart; DIR *dp; printf("Path = %s\n",path); dp = opendir(path); if(dp == NULL) { perror("opendir: Path does not exist or could not be read."); return(-1); } printf("Wie sollen die Dateien umbenannt werden:\n"); scanf("%s",temp_neu); secoundPart=strrchr (temp_neu,'.'); *secoundPart=0; firstPart=temp_neu; while((entry = readdir(dp))) { if(entry->d_name[0]=='.') continue; iIndex++; sprintf(neu,"%s/%s%d.%s",path,firstPart,iIndex,secoundPart+1); sprintf(old,"%s/%s",path,entry->d_name); printf("Old = %s neu = %s\n",entry->d_name,neu); rename(entry->d_name,neu); } closedir(dp); return(0); } int main(int argc, char **argv) { if(listdir(argv[0])<0) printf("listdir faild\n"); return(0); }
Versuchs mal damit...
-
@Binggi: Bekomme immer
listdir failed.
Wie soll ich die *.exe ausführen?Gruß,
Averroes
-
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <dirent.h> int listdir( char *path) { struct dirent *entry; char temp_neu[256]; char neu[256]; char old[256]; int iIndex=0; char *firstPart,*secoundPart; DIR *dp; printf("Path = %s\n",path); dp = opendir(path); if(dp == NULL) { perror("opendir: Path does not exist or could not be read."); return(-1); } printf("Wie sollen die Dateien umbenannt werden:\n"); scanf("%s",temp_neu); secoundPart=strrchr (temp_neu,'.'); *secoundPart=0; firstPart=temp_neu; while((entry = readdir(dp))) { if(entry->d_name[0]=='.') continue; iIndex++; sprintf(neu,"%s/%s%d.%s",path,firstPart,iIndex,secoundPart+1); sprintf(old,"%s/%s",path,entry->d_name); printf("old = %s new = %s\n",old,neu); rename(old,neu); //<- erster Parameter muss old sein... sonst gehts in die Hose } closedir(dp); return(0); } int main(int argc, char **argv) { if(listdir(argv[1])<0) //<-- Muss natürlich argv[0] heissen printf("listdir faild\n"); return(0); }
Aufruf: ProgName Verzeichniss
Gruss Bingg
-
@Binggi --- DANKE!!!!!!!!
Es tut genau das was ich willGruß und ein schönes Wochenende,
Averroes