CFile bzw. CStdioFile lest falsche Daten ein
-
139: ASSERT(pException == NULL || AfxIsValidAddress(pException, sizeof(CFileException)))
140: ASSERT((nOpenFlags & typeText) == 0);
141: ASSERT(m_hFile == INVALID_HANDLE_VALUE);
spätestens hier steig ich komplett aus

-
selbes Problem...lest falsche Daten...
-
Also ich hab am Anfang auch probs mit dem Einlesen einer Textdatei gehabt. Habs aber hinbekommen.
Ich musste
File.Open(cDialog.GetPathName(), CFile::modeRead | CFile::typeBinary);nehmen, um die Datei gescheit auszulesen. Ohne typeBinary bekam ich nur müll raus
-
danke, aber das hab ich vorher auch schon probiert, nachdem sri das mit CFile::typeText gesagt hatte..
funktioniert auch nicht.nochmal das Problem: wenn in der txt-Datei eine float-zahl steht, wird die falsch eingelesen... aus 5.4 wird 1.0 oder 0.1
alles andere (es steht auch Text und Integers in der datei) wird richtig eingelesen...es is zum verzweifeln.... ich hab mich gerade nochmal versichert, dass ich keine falsche Datei einlese
-
CStdioFile reader; CString buffer; CString filename = "c:\beispiel.txt"; if(reader.Open(filename, CFile::modeRead)) { while(reader.ReadString(buffer)) { // jede menge code } }liest ja alles als CString ein. Werden denn die Daten im CString schon falsch eingelesen oder sind die da noch in ordnung? Nicht, dass etwas bei einer nachfolgenden Konvertierung verloren geht.
-
da kommen sie schon falsch an. aber auch wenn ich ein char [] hernehm
-
Kannst du evtl die Komplette Funktion mal Posten, damit man sich mal nen Bild machen kann? Weil eigentlich ist den CString egal ob da nen int, string oder float ist. Und wie kommen die Daten denn aus dem .txt-File? jeder Wert in einer neuen Zeile oder alles hintereinander?
-
int File_Open() { CStdioFile reader;// (filename, CFile::typeText | CFile::modeRead); CString buffer; //char buffer[256]; CString hlp; //float helper; int i = 0; //int gesamtlänge = 0; //DWORD buff; //char buffaa[256]; //LPTSTR lpszBuffer; if(reader.Open(m_ConfigFile, CFile::modeRead)) { while(reader.ReadString(buffer)) //.ReadString(buffer)) { if((i == 2) || (i == 1)) { } // unbrauchbare zeilen else { // Zerteilen des CString's und einfügen in die GUI WriteLineFlexGrid(buffer); } i++; } } /*CFile reader; CString buffer; char test[256]; if(reader.Open(filename, CFile::typeText | CFile::modeRead)) { while(reader.Read(test, 256) > 0) { } }*/ reader.Close(); return 1; }Eben das is ja so seltsam, weil in einen CString kann man ja alles reinpacken..
Die Daten kommen Zeilenweise daher und in einer Zeile stehen ca. 15 Werte, getrennt mit einem Tabstopp (genau wie im txt-File)..
-
also mit einer selbst geschiebenen txt-Datei (strings, int, fload mit tab getrennt) und mit deiner Funktion klappts bei mir. Ich trenn die daten allerdings nicht sondern schmeiß die in eine MSG-Box aus.
void Cproj_3Dlg::OnBnClickedButton1() { CFileDialog cDialog(TRUE, 0, 0, 4|2, _T("txt (*.txt) |*.txt||"), 0 ,0); CString Buffer; if(cDialog.DoModal() == IDOK) { CStdioFile File; File.Open(cDialog.GetPathName(), CFile::modeRead); File.SeekToBegin(); while(File.ReadString(Buffer)) { MessageBox(Buffer, _T("test"), MB_OK); } File.Close(); } }Woher hast du denn die Text-datei? Ich hab nämlich mal ein problem gehabt, dass ich für txt-files, die von einem Tool erstellt wurden halt den Zusatz "typeBinary" im Open brauchte. Ohne gings dann net. mit "typeText" gibts da keinen unterschied bei mir.
-
Ist das so gewollt, dass er beim 1. Durchlauf in den else Zweig rennt?
(Da ist i ja noch auf 0).
-
die Textdatei ist händisch erstellt worden und soll jetzt eben mit einem Programm editierbar sein und sollte auch nicht all zu sehr verändert werden, da sie von einem andern Programm eingelesen wird und als Steuerung verwendet wird.
isabeau: Ja, es sind nur die die zweite und dritte Zeile unbrauchbar (man kann ja noch ein ! einfügen, dass es lesbarer wird, aber zuerst sollten mal die richtigen Daten eingelesen werden *g*)
PS.: Danke für deine Mühen, Uruk

-
HA!...Ich hab eine ähnliche Textdatei jetzt händisch neu geschrieben... Es funktioniert. Naja wenigstens weiss ich nun wo der Hund begraben liegt. Ich muss schauen, ob das andre Programm damit klar kommt und dann kanns weiter gehn.
Danke für deine Hilfe
