Datei lesen und in MessageBox ausgeben

fr34k

Mitglied
Hallo. Ich hoffe ihr könnt mir weiterhelfen! Wenn ich die Textdatei "Spielregeln.txt" lesen und in der AfxMessageBox ausgeben will, stürzt mein Programm ab und will debuggen.

VC++ 6.0
MFC
Win XP

Code:
	CBlackJackDoc* pDoc = GetDocument();
 	char Buffer[2048];
 	CString Text;
 	CFile theFile;
 	theFile.Open("Spielregeln.txt",CFile::modeRead);
 	int nCount=theFile.Read(Buffer,2048);
 	Buffer[nCount]=0;
 	Text=(CString)Buffer;
 	AfxMessageBox(Text);

Danke für alle hilfreichen Antworten.

gruss
 
Hy!

Du hast ein Array mit 2048 Elementen alloziiert. Gleichzeitig ließt du jedoch auch 2048 Zeichen aus dem File. Es könnte daran liegen, dass der String-Terminator keinen Platz mehr in deinem Array hat.

MSDN:
virtual UINT Read(
void* lpBuf,
UINT nCount
);
Parameters
lpBuf
Pointer to the user-supplied buffer that is to receive the data read from the file.
nCount
The maximum number of bytes to be read from the file. For text-mode files, carriage return–linefeed pairs are counted as single characters.

mfg
uhu01
 
Hallo. Danke für die Antwort. Aber ich hab das "Problem" gefunden. Irgendwie kam der nicht mit dem Dateinamen klar. Keine Ahrnung warum. Auf jeden Fall, wenn ich den Dateinamen in regeln.txt ändere, liest er die Datei einwandfrei und gibt die auch aus. Irgendwie seltsam.
 
Jo. Das stimmmt. Ich habe mal n bisschen ausprobiert und herausgefunden, wenn ich die Zeile:


if(!rFile.Open("regeln.txt",CFile::modeRead)) AfxMessageBox("regeln.txt nicht gefunden!");

im Konstruktor auskommentiere, läuft es wieder. Kann mir einer sagen, was für Probleme diese Zeile macht?


gruss
 
Zuletzt bearbeitet:
moin


Hmm
Probier das mal so:
Code:
if(!(rFile.Open("regeln.txt",CFile::modeRead)))
    AfxMessageBox("regeln.txt nicht gefunden!");

Hab Klammern hinzugefügt.


mfg
umbrasaxum
 
Mach deinen Char-Buffer ein paar Zeichen grösser, aber lies trotzdem nur 2048 Zeichen ein. Ich wette, du hast da über das Array rausgelesen.
Wenn genau 2048 Zeichen drin sind, hast du den Null-Terminator ein Zeichen über das Array raus gesetzt.
 
Meine "Spielregeln.txt" ist 1 kb groß, also mit nem 2048 zeichen array sollte das gehen. Hab aber auch schon versucht, das zu vergrößern. Das Ergebnis war das gleiche
 
moin


Hab jetzt mal ein bsichen getestet und bei mir trat das Problem immer auf wenn die angegebene Datei nciht gefunden werden kann.

Folgender Code funktioniert bei aber ohne Probleme:
Code:
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0);

	
 	char Buffer[2048];

 	CString Text;
 	CFile theFile;
 	
	if(theFile.Open("test.txt",CFile::modeRead) == 0)
	{
		AfxMessageBox("Fehler beim öffnen der Datei", NULL);
		return 0;
	}

 	int nCount=theFile.Read(Buffer,2048);
 	Buffer[nCount]='\0';
 	
	Text=(CString)Buffer;
 	AfxMessageBox(Text);
	
	return 0;
}


mfg
umbrasaxum
 
Zurück