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 schreibe

    in = 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 rest

    char 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.aspx

    Ansonsten 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)


Anmelden zum Antworten