Listboxinhalt in Datei schreiben
-
Moin Moin!
Es soll der Inhalt einer Listbox in eine Datei geschrieben werden. In der Listbox lasse ich einfach Zahlen hochzählen, wandle diese in ein CString um und bringe sie zur Anzeige.
Dazu habe ich folgenden Code:
void CSpeichernHomeDlg::OnButtonSave() { // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen //Save-Button inaktiv m_ButtonSave.EnableWindow(FALSE); //Festlegen der Eigenschaften des Dialogfeldes CFileDialog m_ldFile(FALSE); //Dialogfeld Öffnen zeigen und Ergebnis auffangen if (m_ldFile.DoModal() == IDOK) { //Gewählten Dateinamen ermitteln m_sResults = m_ldFile.GetFileName(); //Dialogfeld aktualisieren UpdateData(FALSE); } UpdateData(); CFile datei( m_sResults, CFile::modeCreate | CFile::modeWrite ); datei.Write(m_txt, m_txt_Array.GetSize()); datei.Close(); } UINT CSpeichernHomeDlg::ThreadFunktion(LPVOID pParam) { CSpeichernHomeDlg* pMeineKlasse = (CSpeichernHomeDlg*)pParam; pMeineKlasse->Funktion(); pMeineKlasse->GetDlgItem(IDC_BUTTON_START)->EnableWindow(true); return 0; } void CSpeichernHomeDlg::Funktion() { m_Zahl = 0; while(!cancelflag) { m_txt.Format("%d", m_Zahl); m_Output.InsertString(0, m_txt); m_txt_Array.Add(m_txt); Sleep(10); m_Zahl++; } }
In Funktion findet die Berechnung statt und in der OnButtonSave sollen die Werte hochgezählt werden. Die Anzahl der Zahlen ist variabel, jenachdem wann ich das Zählen beende.
35 ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ýýý
Die letzte Zahl steht erkennbar im File, aber der Rest ist ziehmlicher Schrott. Soweit ich weiß, hat das etwas mit Speicher zu tun. Aber mehr weiß ich auch nicht
Wer weiß Rat???
THX Markus
-
Ich blick deine Savefunktion nicht.
datei.Write(m_txt, m_txt_Array.GetSize());
Das ist doch absoluter Quark.
In m_txt steht die letzte Zahl drin. Und du schreibst dann diese letzte Zahl und gibst als Länge die Gesamtzahl der Zahlen an... ?!
-
mach eine .txt datei
-
Hmm, ich blick da auch nicht ganz durch. Müsste das nicht so lauten?
datei.Write(m_txt, m_txt.GetLength());
Gruß
:: NoName ::
-
Erstmal würde ich CStdioFile benutzen da du die Zahlen als Text speichern willst und ausserdem würde ich mit einer For-Schleife durch alle Einträge gehen anstatt nur einen zuspeichern wie du es im Moment machst.
CStdioFile datei( m_sResults, CFile::modeCreate | CFile::modeWrite ); for(int i =0;i < m_txt_Array.GetSize();i++) { datei.WriteString(m_txt_Array[i] +"\n"); } datei.Close();
-
+"\n" ist imho nicht nötig bei WriteString.
-
@ Andorxor!
Dat isses! Ich wußte nicht, ob man sowas mit einer for-Schleife machen kann. Da kam ich nicht sofort drauf und vor lauter Ausprobieren wußte ich nicht mehr, was ich mache
Ok, als Anfänger ist das nicht ganz so einfach
Ein Megadanke(); für eure Hilfe
Gruß Markus
-
Ich hab das auch mal probiert:
void CVok2Dlg::OnSpeichern() { CStringArray voken; voken.Add("hallo"); //Festlegen der Eigenschaften des Dialogfeldes CFileDialog m_ldFile(FALSE); //Dialogfeld Öffnen zeigen und Ergebnis auffangen if (m_ldFile.DoModal() == IDOK) { //Gewählten Dateinamen ermitteln m_sResults = m_ldFile.GetFileName(); //Dialogfeld aktualisieren UpdateData(FALSE); } UpdateData(); CStdioFile datei( m_sResults, CFile::modeCreate | CFile::modeWrite ); for(int i =0;i < voken.GetSize();i++) { datei.WriteString(voken[i]); } datei.Close(); // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen }
aber das geht nicht, da kommen immer folgende Fehlermeldungen:
...vok2\vok2Dlg.cpp(195) : error C2582: Die Funktion für Operator 'CompileTime directive' ist in '<unbekannt>' nicht verfügbar
...vok2\vok2Dlg.cpp(204) : error C2664: '__thiscall CStdioFile::CStdioFile(const char *,unsigned int)' : Konvertierung des Parameters 1 von 'class CButton' in 'const char *' nicht moeglich
Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
Fehler beim Ausführen von cl.exe.
-
ka, ich blick da eh nciht so durch, kann nciht mal einer erklären, wie man was speichert, langsam für alle?
-
kann mir jemand ernsthaft helfen?