fehler in std::fstream?!?
-
hallo erstmal...
der titel verräts schon. ich hab da nen kleines fstream-problem
also ich hatte mir das folgende kleine verschlüsselungsprogramm geschrieben:#include <fstream> #include <iostream> #include <string> int main() { std::cout << "Enter input filename: "; std::string input_filename; std::getline(std::cin, input_filename); std::ifstream input_file(input_filename.data(), std::ios::in | std::ios::binary); if (!input_file.is_open()) { std::cerr << "Error: Input file not found. Quit." << std::endl; return 1; } std::cout << "Enter output filename: "; std::string output_filename; std::getline(std::cin, output_filename); std::ofstream output_file(output_filename.data(), std::ios::out | std::ios::binary); if (!output_file.is_open()) { std::cerr << "Error: Unable to open output file. Quit." << std::endl; return 2; } std::cout << "Enter passphrase: "; std::string key; std::getline(std::cin, key); if (key.size() % 2 == 0) { key.erase(key.end() - 1); std::clog << "Warning: Last character of key ignored." << std::endl; } while (!input_file.eof()) { char c = input_file.get(); for (std::string::const_iterator i = key.begin(); i != key.end(); ++i) c ^= *i; output_file.put(~c); } std::cout << "Success" << std::endl; return 0; }
problem: wenn ich eine testdatei einmal ver- und dann wieder entschlüssele wurden 2 bytes ans ende angehängt, also zu viel geschrieben
ich find die stelle im code, wo das steht grade nich... wenn mir das eben einer erklären könnte
ich bin mir auch ziemlich sicher, dass ich ein ähnliches problem schonmal hatte. weiss aber nicht mehr genau wobei...schonmal danke
-
Ich weiss jetzt nicht, ob das der Fehler ist. Könnte es sich dabei aber vielleicht schlicht und einfach um das Zeichen handeln, mit dem C++ das Ende eines Strings markiert?
-
Du liest EOF noch ein, und das ist ein Zeichen hinter dem Ende der Datei. Machs so:
char c; while (!input_file.get(c)) { for (std::string::const_iterator i = key.begin(); i != key.end(); ++i) c ^= *i; output_file.put(~c); }
-
0xdeadbeef schrieb:
Du liest EOF noch ein, und das ist ein Zeichen hinter dem Ende der Datei
Oder in XXL:
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=eof#Answ