Hilfe bei Dateizugriff
-
#include <iostream> #include <string> #include <fstream> bool read_line(const std::string&, std::string&); int main() { std::string line; if (read_line("Test.txt", line) == false) std::cout << "ERROR: An error occured reading \"Test.txt\"!" << std::endl; else std::cout << line << std::endl; } bool read_line(const std::string& filename, std::string& line) { std::ifstream file_stream; file_stream.open(filename.c_str(), std::ios::in); if (file_stream.is_open() == false || file_stream.good() == false) return false; std::getline(file_stream, line); if (file_stream.good() != true) { file_stream.close(); return false; } file_stream.close(); return true; }So mal nen kleies Sample ... habs nicht getestet ... sollte aber gehen ...
-
Vielen Dank schonmal, bringt mich auf jeden Fall ein bisschen weiter.
Den Großteil versteh ich auch
Eine Frage hab ich aber noch dazu, wo geb ich in dem Code jetzt meinen Vergleichsstring "Dies ist die erste Zeile" ein, oder gibt mir das Programm nur die erste Zeile als Wert zurück und der Vergleich erfolgt danach?
-
Der Code liest nur die erste Zeile der Datei - was du dann damit machst, bleibt dir überlassen (das Beispielprogramm oben gibt die Zeile per
cout<<line<<endl;aus - an der Stelle müsstest du deinen Vergleich einbauen).
-
Die ganzen Vergleiche mit true und false sind dem Verständnis eher nicht förderlich, ganz im Gegensatz zu den Kopfschmerzen, die sich dadurch einstellen.
jedenfalls können wir unser Beispiel sehr stark vereinfachen:
bool read_line(const std::string& filename, std::string& line) { std::ifstream file_stream; file_stream.open(filename.c_str(), std::ios::in); std::getline(file_stream, line); return file_stream; }Der Test, ob das Öffnen des Files gelungen ist, mag noch akzeptabel sein - andererseits schlägt getline sowieso fehl, wenn das nicht der Fall ist. Jedenfalls ist der Kram danach im Grunde nur inhaltsleerer Lärm.
-
So ich hab das Mal alles angepasst und eingebaut Compiler (VS) läuft auch sauber durch, leider springt mir die Funktion immer bei der 2. if Abfrage der Funktion mit false raus und ich weiß einfach nicht warum. Das müsste die letzte Hilfe sein die ich noch brauche dann wär ich ein großes Stück weitergekommen.
Hier noch zur Kontrolle der betroffene Quellcode:#include <fstream> #include <iostream> #include <string> using namespace std; // Funktions Prototypen . . bool read_line(const string&, string&); int main() { string vergleich("test_1"); string line; if (read_line("test.txt", line) == false) cout << "\n ERROR: An error occured reading \"test.txt\"!" << endl; else { cout << line << " = " << vergleich << endl; } if (line == vergleich) cout << "Vergleich = OK"; else cout << "Die Datei enthaelt keinen passenden Text" << endl; } bool read_line(const string& filename, string& line) { ifstream file_stream("c:\\test.txt"); file_stream.open(filename.c_str(), std::ios::in); if (file_stream.is_open() == false) { cout << ".is_open = false" << endl; return false; } else cout << "\n oeffnen klappt" << endl; if (file_stream.good() == false) { cout << ".good = false" << endl; return false; } getline(file_stream, line); if (file_stream.good() != true) { file_stream.close(); return false; } file_stream.close(); return true; }@ LordJaxom: Sorry, ich poste nicht so oft. Ich hoffe jetzt ist es leserlicher.
-
Schau Dir mal die Beiträge der anderen an, dann staune wie schön die den Code formatieren können, frag Dich warum Du das nicht kannst, und stolpere im Zuge Deiner Recherchen über den "C/C++"-Button unter dem Nachrichteneditor. Dann editier Deine Nachricht nochmal und formatiere den Code auch so schön. Bitte.
-
Hallo nochmal,
Kann mir bitte jemand weiterhelfen wie ich doch noch auf meine gewünschte Ausgabe des Strings komme (s.o.)?
-
#include <iostream> #include <fstream> #include <string> bool read_line(const std::string&, std::string&); void wait_input(void); int main() { std::string string_compare("Das ist ein Test!"); std::string string_line; if (read_line("test.txt", string_line) == false) { std::cout << "ERROR: An error occured reading \"test.txt\"!" << std::endl; wait_input(); return 0; } std::cout << "\"" << string_line << "\" = \"" << string_compare << "\"? " << (string_line == string_compare ? "Ja" : "Nein") << std::endl; wait_input(); return 0; } void wait_input(void) { std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail()); std::cin.get(); } bool read_line(const std::string& filename, std::string& line) { std::ifstream file_stream; file_stream.open(filename.c_str(), std::ios::in); if (file_stream.is_open() == false || file_stream.good() == false) return false; std::getline(file_stream, line); file_stream.close(); return true; }... so funktioniert es problemlos ...
-
Erstmal ein großes Danke an Dich (D)Evil, für die Zeit und Mühe.
Ich merke aber das meine Kenntnisse wohl doch noch nicht ausreichen um so ein Projekt anzugehen, da ich trotz deines anscheinend korrekten Quellcodes es schon wieder nicht geschafft habe den String ausgeben zu lassen.
Es wird, wie schonmal erwähnt, am falschen Einbinden des Dateipfades liegen.
Habs jetzt schon einige Male probiert aber leider nicht hinbekommen.
Ich frag jetzt nochmal ein paar Bekannte, bevor ich mich hier nochmehr blamiere.Wenn aber noch einer einen Tipp hat kann er ihn natürlich gerne posten...
-
Naja das ist ja wohl kein großes Projekt
Hmm ... also wo liegt den deine Datei? Sonnst gib doch einfach mal den genauen Dateispeicherort an ... anstelle von test.txt ...
-
Die Datei liegt auf C:\\test.txt
Naja das ist ja wohl kein großes Projekt
Das bisschen Quellcode ist leider nur ein kleiner Teil von etwas ganz Großem

Ich schreib an einem Tool, welches bestimmte Dateien in einem vorgegebenen Verzeichnis sucht, die erste Zeile ausliest, mit meiner vorgegebenen vergleicht und bei Übereinstimmung löscht, dazu einen anderen Dateityp selben Namens dazu linkt und ebenfalls löscht. Hab mir schon überlegt, dass als Abschlussarbeit zu beantragen, aber Andere sagen, das wäre zu leicht
Wenn du mir erklärst wie ich den Dateipfad in deinen Quellcode einbaue, dann hätte ich wenigstens schon mal einen kleinen Einstieg...
-
WOW, (D)Evil du bist mein Gott!
Ich habs grad zum Laufen bekommen.

Vielen, vielen Dank für die Hilfe!
Solltest du noch Tipps für mein Tool haben, kannst du die mir natürlich sehr gerne posten
