C++ Integer Array in Datei schreiben und zum vergleichen wieder auslesen

stan2008

Lt. Junior Grade
Registriert
Sep. 2008
Beiträge
333
Tja mein Problem ist ja eigentlich schon im Titel erklärt :D ^^
Hier mal ein Teil meines Codes:
PHP:
bool kombiSchonVorhanden()
{
	if(externeDatei == 1)
	{
		fstream datei("C:\\Ausgabe.txt", fstream::out | fstream::in);
		int zeile[8];
		string zeilen;
		if (datei.good())
		{
			datei.seekg(0L, ios::beg); //zum anfang der datei springen
			while(! datei.eof())
			{
				getline(datei, zeilen);
				for(int i = 0; i<7; i++)
					zeile[i] = (int)zeilen.at(i) - 48;
				if(zeile[0] == dameY[0] && zeile[1] == dameY[1] && (...))
					return 1;
				else return 0;
			}
		}
		datei.close();
	}
	else return 0;
}

Das Hauptproblem liegt wahrscheinlich darin, dass er die Datei erst gar nicht öffnet, denn ohne die "if(datei.good())" Abfrage springt mir folgende schöne Fehlermeldung entgegen:
fehler-jpg.227151


Tschulding falls ich zu blöd zum googlen bin, hab aber weder da noch etwas über die ForumBase-Suche gefunden :(
 

Anhänge

  • Fehler.jpg
    Fehler.jpg
    212 KB · Aufrufe: 1.661
Auf deinem Debug-printout sieht's so aus, als würde es bei diesem Zugriff knallen

zeile = (int)zeilen.at(i) - 48;

wobei i 0 ist. Vielleicht solltest du vorher mal überprüfen, ob der String überhaupt etwas enthält (std::string::length() oder std::string::empty())?
 
die Funktion ist sehr widersprüchlich programmiert. Die While-Schleife wird z.B. höchstens einmal durchlaufen. Dann kommen noch einige globale Variable hinzu. Hier eine alternative Demo-Source die dir weiterhelfen könnte:

Code:
#include <fstream>
#include <ios>
#include <iostream>
#include <string>


bool zeile_in_datei_enthalten(const std::string& file_spec, const std::string& zeile) 
{ 
	std::ifstream ifs(file_spec.c_str()); 
	if(ifs) {
		std::string s;
		while(std::getline(ifs, s)) {
			if(s.substr(0, zeile.size()) == zeile)
				return true;
		}
	}
	return false;
}  

int main()
{
	bool f = zeile_in_datei_enthalten("g:\\work\\demo02\\demo02.cpp", "	return false;");
	return 0;
}
 
Zurück
Oben