Dateien öffnen
-
Hi Leute,
Ich will mir ein eigenes Verschlüsselungsprogramm für .txt Dazeien schreiben. Leider scheitert es schon bei dem öffnen:
FILE *datei; char *cdatei; //[...] cin >> *cdatei; datei = fopen(cdatei, "r+"); if(datei==NULL){ cout << "Datei nicht gefunden/Fehler beim oeffnen" << endl; } } while(datei == NULL);==> Datei wurde nicht gefunden, obwohl diese Datei 100% existiert und, wenn ich
datei = fopen("log.txt","r+");wird die Datei gefunden. Das gebe ich natürlich auch ein.
Kann mir bei dem Problem einer helfen? Suchfunktion und Google haben nicht ausgespuckt.
mfG TheCrip
-
Sieh dir kurz nach der Eingabe deine Variable cdatei genauer an. Per Debugger oder per Ausgabe. Vielleicht bringt dich das auf die richtige Fährte.

-
Warum keinen std::string? Warum keinen std::fstream?
-
Okok das war dumm

vielen Dank!
Lösung:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39497.htmlDamit wird *eingabe zu *&eingabe[0].
Also
cin >> cdatei;ohne *!
Danke, das ich da nicht selber drauf gekommen bin...E:
Warum keinen std::string?
Bei der Passworteingabe muss ich das gleiche machen, um die einzelnen Stellen auzulesen. Das geht mit einen char-array schon einfacher.
Warum keinen std::fstream?
Hab ich noch nicht benutzt hab bisher immer mit fputs und so gearbeitet. Ist das so viel besser?
-
Vielleicht passiert ja noch etwas Wichtiges in den Codezeilen die du ausgeklammert hast, aber im Moment könnte es sein, dass du den Zeiger cdatei verwendest, bevor er initialisiert ist. Das geht natürlich nicht gut.
Den Tipp von Icematrix würde ich an deiner Stelle beachten. Damit geht es leichter.

-
Bei der Passworteingabe muss ich das gleiche machen, um die einzelnen Stellen auzulesen. Das geht mit einen char-array schon einfacher.
Ein std::string lässt sich wie ein char-array nutzen.
Der []-Operator ist implementiert, versuchs mal
-
Was ist denn daran so viel besser?
-
TheCrip schrieb:
Was ist denn daran so viel besser?
Der von dir anfangs gemachte Fehler wäre vermutlich nie aufgetreten.
std::string input; std::cin >> input;an ein char array kommst du dann wieder mit
input.c_str()Wenn du schon C++ programmierst kannst du natürlich auch die C++ streams nutzen.
std::ifstream file(input.c_str()); if (!file.good()) { std::cerr << "error: datei nicht gefunden"; } std::string buf; while (!file.eof()) { std::getline(file, buf); std::cout << buf; } file.close(); // Destruktor erledigt das eigentlich, aber ist guter Stil.
-
@TheCrip: Dein ursprünglicher Fehler ohne Standard-String war, dass du für den Dateinamen nur ein einziges Character und keinen Character-Array deklariert hattest. Hätte in ANSI-C heissen müssen: char cdatei[12] oder so. Auch wer die Bequemlichkeiten von C++ nutzt, sollte die grundlegenden Dinge von ANSI-C auch drauf haben oder es geht manchmal einiges in die Hose!