pfad abfragen und datei Öffnen
-
ok hab grad nen echtes problem was mich irgend wie fertig macht. Ich will das der nutzer einen pfad eingibt und anschließend diese datei geöffnet wird. Hier erst mal der dazugehörige code (ist nur ein auszug aus ein riesiegen programm aber hier hapert es)
do { flag = 0; //Entscheidungsvariable wird vordeffiniert //Konsole leeren clearconsole(); //Pfad eingabe, wo ist die Datei printf("Bitte geben sie den Pfad der Datei, in welcher sich der public key befindet, an!\n\n"); printf("> "); //Eingabe abfangen scanf("%c",&pfad); while (getchar() != '\n'); //teste ob pfad existent in = fopen(pfad,"r"); if (in == NULL){ //ungueltige eingabe, pfad nicht existent printf("Ungueltige Pfad eingabe"); getchar(); flag=1; } else { printf("Gueltiger pfad"); } } while (flag == 1);
so jetzt kompiliere ich das programm, es wird kein fehler angezeigt
anschliessend komme ich zu der stelle wo ich den pfad eingeben soll(arbeite mit windows xp) ich gebe also a.txt ein (Datei exestiert und befindet sich in den selben ordner wie alle projekt datein) aber mir wird angezeigt ungueltiger pfad, wenn ich jedoch den pfad fest setzte dann funktioniert es kann mir jemand erklären was ich falsch mache.
Danke
-
Dann schau die mal genau an,
- wie die Variable pfad definiert ist.
- was scanf bei %c machen soll und dort als Parameter erwartet
- was fopen als ersten Parameter benötigt.Als Hilfe mal: http://www.cplusplus.com/reference/clibrary/cstdio/scanf/
-
Glatt übersehen:
Mit fopen öffnet man Dateien.
Einen Pfad kannst du so nicht überprüfen. Dafür gibt es je nach Betriebssystem unterschiedliche Funktionen.Welches Betriebssystem und welchen Compiler nutzt du denn?
-
glatt vergessen also pfad und in ist folgendermassen deffiniert
char pfad[255];
FILE *in, *out;wie gesagt betriebssystem ist win Xp komp. ist der gcc.
aber in allgemeinen öffnet fopen(pfad, modus) ja eine datei und gibt als parameter die adresse zurück also haut das ja hin was ich mache, wenn die datei nähmlich nicht exestiert ist in == NULL
als beweis wenn ich im programm schreibein = fopen("a.txt","r"); funktioniert ja alles
-
Max Mustermann schrieb:
in = fopen("a.txt","r"); funktioniert ja alles
Ein Missverständis, sorry.
Da ist das ein Dateiname. Ein Pfad ist üblicherweise nur die Angabe der Verzeichnisse.Für eine Stringeingabe gibt es bei scanf %s. Das hört aber bei Whitespaces (Leerzeichen und Co) auf mit der Eingabe.
Daher nimm lieber:scanf("%254[^\n]", pfad);// Alle Zeichen außer \n aber höchstens 254
solche Fehler kannst du auch mit etwas besseren Ausgaben auf die Spur kommen:
printf("Ungueltiger Pfad eingegeben: <%s>\n", pfad);
Das hilft später auch den Nutzer bei Schreibfehlern.
-
ok hab es jetzt erst mal soweit abgändert:
do { flag = 0; //Entscheidungsvariable wird vordeffiniert //Konsole leeren clearconsole(); //Pfad eingabe, wo ist der public key printf("Bitte geben sie den Pfad der Datei, in welcher sich der public key befindet, an!\n\n"); printf("> "); //Eingabe abfangen scanf("%254[^\n]", &pfad); while (getchar() != '\n'); //teste ob pfad existent in = fopen(pfad,"r"); if (in == NULL){ //ungueltige eingabe, pfad nicht existent printf("Ungueltiger Pfad eingegeben: <%s>\n", pfad); getchar(); flag=1; } else { printf("Gueltiger pfad"); getchar(); } } while (flag == 1);
zur ergänzung die variable flag ist unrelevant
zu den restchar pfad[255]; //Variable zur speicherung eines Pfades FILE *in, *out; //Zeiger auf eine Datei
das Problem besteht jedoch weiterhin: ich gebe einen gültigen pfad ein (a.txt) wie gesagt die Datei exestiert im Basisordner und angezeigt bekomme ich ungueltige eingabe <a.txt>
Sieht irgend wer den fehler????
-
wie gibst du den Pfad ein?
Es muss in etwas so aussehen: c:\\Dateien\\Texte\\test.txt
-
Selber mach ist schön. Standardlibs nutzen besser.
Schau Dir stat an (<sys/types.h> und <sys/stat.h>).
Ist posix konform.
Oder die CRT Libs von VC.
Hier findst du bei den Filehandlingroutinen eine Funktion namens access. :xmas2:
http://msdn.microsoft.com/de-de/library/kdfaxaay.aspxAnsonsten google Dir die Bedeutung von Full Qualified Pathname.
Viel Spaß
-
neo47 schrieb:
wie gibst du den Pfad ein?
Es muss in etwas so aussehen: c:\\Dateien\\Texte\\test.txt
Aber nicht bei der Eingabe.
Dein Beispiel gilt für Stringliterale (konstanter Text im Quellcode)Max Mustermann schrieb:
ich gebe einen gültigen pfad ein (a.txt) wie gesagt die Datei exestiert im Basisordner und angezeigt bekomme ich ungueltige eingabe <a.txt>
Die Datei muss im selben Ordner liegen wie deine .exe
Die Ausgabe "ungueltige eingabe <a.txt>" passt auch nicht zu deinem Code. - Bitte Copy&Paste (Ausgabe und Code)