probleme mit CStdFile & CString
-
Close schreibt man mit großem C. So wie Open und Write mit großen Buchstaben anfangen. Sagt zumindest die MSDN Library. Hast du da nicht mal reingeschaut?
-
erstma thx leute und dann ein großes sry leutz das ich darauf nicht selber gekommen bin is ja schon peinlich ... naja liegt wohl daran das ich erst mit mfc programmierung angefangen hab und vorher nur win32 konsolen anwendung geschreiben hab die meisten funktionen und classe's und so habn wir(meine klasse und ich) da imma klein geschrieben.....
sry nochma
greetz beelze
-
neues problem:(
Beim Zugriff auf c:\test.txt wurde ein voller Datenträger gemledet.
ahm 20 GB sollten eigentlich reichen....
//steht in der CDialog vor der class// struct GNFleed { int Sek; int Gala; int Jager; int Bomber; int Fregs; int Zeris; int Kreuzer; int Schlachta; int Trager; int Cleps; int Cancs; BOOLEAN writen; }; //protect in der Dialog class deklariert// GNFleed GNF_Gesamt; void CFlottenenrechnerDlg::OnSave() { CString dumb; // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen CFileDialog fileDlg( FALSE, _T("*.txt|*.html"),"",OFN_HIDEREADONLY,_T("Textdatei (*.txt)|*.txt|Htmldatei(*.html)|*.htm|"), NULL ); if(fileDlg.DoModal() == IDOK) { CString strFile = fileDlg.GetPathName(); CStdioFile* pStdioFile = new CStdioFile(); pStdioFile->Open( strFile, CFile::modeCreate); dumb.Format(_T("Koords: %d ; %d\r\nJager:%d \r\nBomber:%d\r\nFregatten:%d\r\nZerstörer:%d\r\nKreuzer:%d \r\nSchlachter:%d\r\nTräger:%d\r\nCleptoren:%d\r\nSchutzschiffe:%d\r\n"),GNF_Gesamt.Jager,GNF_Gesamt.Bomber,GNF_Gesamt.Fregs,GNF_Gesamt.Zeris,GNF_Gesamt.Kreuzer,GNF_Gesamt.Schlachta,GNF_Gesamt.Trager,GNF_Gesamt.Cleps,GNF_Gesamt.Cancs); pStdioFile->Write(dumb,sizeof(dumb)); pStdioFile->Close(); } }
hab kein Plan warum der fehler kommt dürften doch höchsten nen paar KB zusammen kommen wenn ich die Variable in eine datei schreibe....
achso auch auf allen anderen platten wo teil weise 50gb und mehr frei sind geht es auch nicht .... -.-greetz beelze
-
Willst du eigentlich nur die Datei erstellen oder auch etwas in ihr reinschreiben ?
Falsch:
pStdioFile->Open( strFile, CFile::modeCreate);
Richtig:
pStdioFile->Open( strFile, CFile::modeCreate | CFile::modeWrite);
Gruß
:: NoName ::
-
thx nochma sach ja noch net ganz so fit in MFC programmierung ...
funzt aber imma noch nichtt ganz.
schreibt mir jetzt nur "koor" rein mehr nicht.
woran kann das liegen??
hab mal zum testen nach dem
dumb.format("");
eine
MessagBox(dumb);
eingefügt und da zeigt er mir auch alles an was in dumb stehen sollte speichert das aber ahlt nicht in die text datei...greetz beelze
-
Das liegt an
pStdioFile->Write(dumb,sizeof(dumb));
Mit sizeof() erhältst du nicht die Byte-Anzahl die du in die Datei schreiben willst. sizeof() liefert dir die Größe eines Datentyps.
Versuchs mal so:
pStdioFile->Write(dumb, 512);
Außerdem, alles was man mit new anlegt sollte man auch wieder mit delete löschen....
Ich sehe ein
CStdioFile* pStdioFile = new CStdioFile();
Aber kein delete
Gruß
:: NoName ::
-
erstma thx
und dann nochwas nur zum verständnis sizeof(dumb) jibt mir immer den selben wert zurück egal wieviel zeichen in der CString variable stehn oder wie??
könnten ich dann nicht (ich kenn jetzt nur die funktion für nen char string)
siezof(strlen(dumb)*dumb) nehmen nur um auf nummer sicher zu gehngreetz beelze
-
pStdioFile->Write(dumb, dumb.GetLength() );... wäre die Lösung
Ein CString hat nur die Grösse von 4 (Byte), völlig egal wie lang der Text ist.
-
thx@all
habs aber scho selber gehschaft nur der volständiger halber mal meine lösungpStdioFile->Write(dumb,strlen(dumb));
-
DaDings schrieb:
pStdioFile->Write(dumb, dumb.GetLength() );... wäre die Lösung
Ein CString hat nur die Grösse von 4 (Byte), völlig egal wie lang der Text ist.Genau so siehts aus....
Gruß
:: NoName ::
-
diese funktion sollte eigentlich eine ganzes feld( dieses feld ist eine struct) nach für nach in eine file schreiben und saven.
Da die schleife diese nicht tat, sodnern mir immer nur einf feld der struct weg geschriebn hat(jedenfalls sah es so aus da in der file immer die struct stand die man zu letzt eingegeben hat).
hab ich gedacht das könnte daran liegn das der file *pointer bei jeden durchlaufen der schleife wieder an den anfng der file gesetzt wird.
dem scheint aber nicht so zu sein. da ich danach die seektoend(); function eingebaut habe.
aber es will immer noch nicht.
naja weis nu halt nicht mehr weiter....
aber ihr seite ja noch da*G* :)*Wegversteck*
greetz beelze
void CFlottenenrechnerDlg::OnSave() { CString dumb; // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen CFileDialog fileDlg( FALSE, _T("*.txt|*.html"),"",OFN_HIDEREADONLY,_T("Textdatei (*.txt)|*.txt|Htmldatei(*.html)|*.htm|"), NULL ); if(fileDlg.DoModal() == IDOK) { CString strFile = fileDlg.GetPathName(); CStdioFile* pStdioFile = new CStdioFile(); pStdioFile->Open( strFile, CFile::modeCreate | CFile::modeWrite); for(int i=0;i!=FlottenAnz;i++) { pStdioFile->SeekToEnd(); dumb.Format(_T("Koords:%d:%d\r\nJager:%d\r\nBomber:%d\r\nFregatten:%d\r\nZerstörer:%d\r\nKreuzer:%d \r\nSchlachter:%d\r\nTräger:%d\r\nCleptoren:%d\r\nSchutzschiffe:%d\r\n"),GNF_Fleeds[i].Gala ,GNF_Fleeds[i].Sek,GNF_Fleeds[i].Jager,GNF_Fleeds[i].Bomber,GNF_Fleeds[i].Fregs,GNF_Fleeds[i].Zeris,GNF_Fleeds[i].Kreuzer,GNF_Fleeds[i].Schlachta,GNF_Fleeds[i].Trager,GNF_Fleeds[i].Cleps,GNF_Fleeds[i].Cancs); } MessageBox(dumb); pStdioFile->Write(dumb, dumb.GetLength() ); pStdioFile->Close(); } }
-
MSDN hilft
Versuchs mal so
pStdioFile->Open( strFile, CFile::modeCreate | CFile::modeWrite | CFile::modeNoTruncate);
CFile::modeNoTruncate bewirkt, dass der Inhalt der Datei nicht überschrieben wird.
Gruß
:: NoName ::