[C++] Probleme mit ifstream

songbird

Grünschnabel
Hallo zusammen,

ich habe folgendes Problem:

Ich habe eine Textdatei die beim Programmstart ausgelesen und in einem Vector gespeichert werden soll.

Die Textdatei besteht aus Wörtern, die durch eine Raute getrennt werden. Ich lese also immer von Raute zu Raute.
Der Einlese-Vorgang geschieht in einer while-Schleife.
Mein Problem ist nun, dass die while-Schleife trotz der Anweisung while(dh.good()) auch bei einer leeren Textdatei einmal durchlaufen wird. Und wenn in der Textdatei eigentlich soviel drinsteht, dass die Schleife mehrmals durchlaufen werden müsste, wird die while-Schleife nur einmal durchlaufen... Ich habe schon hin und her probiert, weiß aber nicht woran es liegen könnte... while(!dh.eof()) hab ich auch schon ausprobiert.
Hier mal ein code-ausschnitt:
Code:
vector<Medium*> mainVec;

bool isBoot, lent, isSingle;
int length, releaseYear;
string title, id, genre, interpret, place lentByName, lentByMail, comment
char test[100000];

vector<Medium*> getMainVec()
{
	return mainVec;
}

void readCdAudio()
{
	// Textdatei cdAudio.txt auslesen
	ifstream dh ("cdAudio.txt");
	if(!dh)
	{
		cerr << "cdAudio.txt konnte nicht geöffnet werden!" << endl;
		exit(-1);
	}
	
	while (dh.good())
	{
		CdAudio *cda = new CdAudio();
		isBoot = true;
		lent = true;
		isSingle = true;
		
		dh.getline(test, 100000, '#');
		interpret = test;
		cda->CdAudio::setInterpret(interpret);
		
		dh.getline(test, 100000, '#');
		title = test;
		cda->CdAudio::setTitle(title);
				
		dh.getline(test, 100000, '#');
		id = test;
		cda->CdAudio::setId(id);
				
		dh.getline(test, 100000, '#');
		length = atoi(test);
		cda->CdAudio::setLength(length);
				
		dh.getline(test, 100000, '#');
		if (test[0] == '0')
		{
			isBoot = false;
		}
		cda->CdAudio::setIsBoot(isBoot);
		
		dh.getline(test, 100000, '#');
		genre = test;
		cda->CdAudio::setGenre(genre);
		
		dh.getline(test, 100000, '#');
		place = test;
		cda->CdAudio::setPlace(place);
			
		dh.getline(test, 100000, '#');
		if (test[0] == '0')
		{
			lent = false;
		}
		cda->CdAudio::setLent(lent);
				
		dh.getline(test, 100000, '#');
		lentByName = test;
		cda->CdAudio::setLentByName(lentByName);
				
		dh.getline(test, 100000, '#');
		lentByMail = test;
		cda->CdAudio::setLentByMail(lentByMail);
				
		dh.getline(test, 100000, '#');
		releaseYear = atoi(test);
		cda->CdAudio::setReleaseYear(releaseYear);
		
		dh.getline(test, 100000, '#');
		comment = test;
		cda->CdAudio::setComment(comment);
		
		dh.getline(test, 1, '#');
		if (test[0] == '0')
		{
			isSingle = false;
		}
		cda->CdAudio::setIsSingle(isSingle);
		
		cda->CdAudio::setType("Audio-CD");
		
		setMainVec(cda);
	}
	dh.close();
}

Ich wär echt froh wenn mir jemand helfen könnte...
 
Zuletzt bearbeitet:
Ich hab selber mal eine ähnliche Sache umgesetzt.
Meine Funktion dafür sah so aus, dass ich mit getline eingelesen habe:
Code:
    while( getline(myInputFile,sLine) ){
       	if( sLine.empty() );      // ignorieren leerer Zeilen
	else{
       	      //sLine verarbeiten
	}
    }
 
Zurück