Dateien öffnen
-
Verwende statt gets() fgets(). Stichwort Stackoverflow.
Wie DirkB schon vermutet hat, wird bei gets() bzw. fgets() das '\n' mit eingelesen. Deswegen kann die Datei nicht gefunden werden. Test:
FILE *f; char buf[100]; fgets(buf, sizeof(buf), stdin); buf[strlen(buf) - 1] = '\0'; f = fopen(buf, "r");
-
So hier könnt ihr die Datei, die ihr öffnen wollt mit der Maus auf eure xy.exe ziehen. Die anderen Möglichkeiten stehen euch ebenso offen -> Wenn ihr nicht mit der Maus ziehen wollt oder die zu öffnende Datei auch nicht als Argument übergeben wollt, sollte auch die Eingabe des Dateinamens möglich sein.
#include <stdio.h> #include <stdlib.h> #include <string.h> int main( int argc, char *argv[]) { FILE *datei_ptr; char datei [67]; if(argc < 2) { printf("Name der zu öffnenden Datei > "); gets (datei); } else { strcpy(datei,argv[1]); } datei_ptr = fopen(datei,"r"); if(datei_ptr!=NULL) { printf("\nDatei %s wurde geoeffnet!", datei); fclose(datei_ptr); } else { printf("\nDatei %s lässt sich nicht oeffnen", datei); } printf("\n\n\n\n"); system("PAUSE"); }
-
cooky451 schrieb:
Verwende statt gets() fgets(). Stichwort Stackoverflow.
Wie DirkB schon vermutet hat, wird bei gets() bzw. fgets() das '\n' mit eingelesen.
http://www.cplusplus.com/reference/clibrary/cstdio/gets/
Zitat:
The ending newline character ('\n') is not included in the string.
A null character ('\0') is automatically appended after the last character copied to str to signal the end of the C string.
-
Erikson schrieb:
Das Programm weiss ja nicht wo die Datei auf meinem Rechner gespeichert ist und sucht sicherlich auch nicht meine ganze Festplatte ab.
Wenn Du einfach den Dateinamen ohne Pfadangaben benutzt, muss die Datei im selben Verzeichnis liegen, wie Dein ausführbares Programm - also die exe - Datei.
-
Belli schrieb:
Zitat:
The ending newline character ('\n') is not included in the string.Oups, irgendwie dachte ich, dass gets eh nur fgets aufruft. Wieder was gelernt, wobei es auch irgendwie sinnlos ist, da gets ja eh böse ist
-
Danke erstmal an alle.
@Belli: Das war was ich hören wollte. Danke!
@f.-th.: Wahrscheinlich eine gute Lösung allerdings ist mir das verwenden von Kommandozeilenparametern noch etwas undurchsichtig. Werd mir Mühe geben die Sache noch zu verstehen.
-
f.-th. schrieb:
So hier könnt ihr die Datei, die ihr öffnen wollt mit der Maus auf eure xy.exe ziehen. Die anderen Möglichkeiten stehen euch ebenso offen -> Wenn ihr nicht mit der Maus ziehen wollt oder die zu öffnende Datei auch nicht als Argument übergeben wollt, sollte auch die Eingabe des Dateinamens möglich sein.
Bei mir blinkt ein weißes Strichlein auf schwarzem Hintergrund. So sehr ich auch die Maus irgendwohin schiebe und irgendwas herumziehe, da tut sich nix.
-
Oh, Maus mal nicht auf Console, sondern auf dem Dateimanager oder was ihr bei euch vergleichbares drauf habt. Dachte das war klar.
Kommadozeilen Aufruf auf Console: "xy.exe öffnemich.file" - Enter
oder auch nur xy.exe starten und dann eingeben, wo ihr aufgefordert werdet.
Aber das sollte doch zu den Grundkenntnissen gehören, oder
MfG f.-th.
-
f.-th. schrieb:
Oh, Maus mal nicht auf Console, sondern auf dem Dateimanager oder was ihr bei euch vergleichbares drauf habt. Dachte das war klar.
Kommadozeilen Aufruf auf Console: "xy.exe öffnemich.file" - Enter
oder auch nur xy.exe starten und dann eingeben, wo ihr aufgefordert werdet.
Aber das sollte doch zu den Grundkenntnissen gehören, oder
MfG f.-th.
In meinem Dateimanager gibts auch keine .exe-Dateien - zumindest keine, die mein Linux ausführen wollen würde.
Das sollte eigentlich nur ein kleiner, zarter Hinweis auf die Nichtportabilität von "mit der Maus auf die .exe ziehen" sein
Wer meint, gerne Programmieren (können) zu wollen, der sollte sich früher oder später (eher früher als später) mit dem Thema Aufrufparameter auseinandersetzen...
-
Okay, aber wusste da jemand nicht wie das mit der Kommandozeile ging? Da bin ich halt von Windows ausgegangen
Sollte meine Vorurteile ablegen - es gibt heute auch Linux-Nutzer, die nicht wissen, das sie mit einem Linuxableger arbeiten. Diese kennen dann wahrscheinlich auch keine Kommandozeile
Du siehst, Vorurteile halten sich hartnäckig