Speichern mit CFile und CArchive
-
Hi Leute,
ich habe ein Programm geschrieben, bei dem per "Durchsuchen" Button ein CFileDialog ld(FALSE,.....); also ein Laden-Fenster von Windows erscheint. Anschließend holt es den Pfad per CString String = ld.GetPathName(); in einen String. Diesen füge ich dann einem Listenfeld hinzu. Beim beenden des Programms soll er diese Pfade abspeichern. Das tut er auch, aber nur, wenn ich die Pfade selbst in ein der String Variable zugeordnetem Eingabefeld eingebe. Die im Ladeb-Fenster ausgewählten Pfade werden nicht abgespeichert, wenn ich jedoch diesselben Pfade eintippe, werden sie abgespeichert.
Ich kann mir das nicht erklären. Wär nett, wenn irgend jemand eine Lösung hätte oder zumindest den Grund nennen könnte.
Danke im Voraus.
-
Hm, und wo verwendest Du da CFile & CArchive?
-
Also hier der Speichern-Code:
UpdateData(TRUE); if(m_ctlProgramme.GetCount() > 0) { m_iArrayCounter = m_ctlProgramme.GetCount(); m_sProgrammArray.RemoveAll(); } CFile save("Saves.ini",CFile::modeCreate|CFile::modeWrite); CArchive ar(&save,CArchive::store); ar << m_bRegelmaesig_Warten; ar << m_ctDatum; ar << m_ctUhrzeit; ar << m_iArt; ar << m_iWochentag; ar << m_iZeitpunkt; ar << m_iDatum; ar << m_sPfad; ar << m_iArrayCounter; if(m_ctlProgramme.GetCount() > 0) { for(int i = 0;i < m_ctlProgramme.GetCount();i++) { m_ctlProgramme.SetCurSel(i); UpdateData(TRUE); ar << m_sProgramme; } } ar.Close(); save.Close(); PostQuitMessage(1); }
Zur Erklärung:
m_sProgramme = Variable des Listenfeldes
m_ctlProgramme = s.o.
m_iArrayCounter wird beim Laden benötigt; enthält Anzahl der Elemente die am Schluss abgespeichert werden.
-
hi!
ich wollte nur kurz sagen dass ich das problem auch hatte!
hab da ein paar wochen daran gearbeitet hab es aber net lösen können!mfg
-
Danke - Wenigstens ein Leidensgenosse
-
Dein Code zum Speichern ist soweit richtig, nur würde ich die Schleife in dies hier ändern:
for( int i=0; i<m_ctlProgramme.GetCount(); i++) { m_ctlProgramme.GetText( i, m_sProgramme); ar << m_sProgramme; }
Frage: Werden die Pfade im Listenfeld richtig angezeigt? (Zeig mal den Code, wie Du das Listenfeld mit den Pfaden vom CFileDialog füllst!
-
Danke, habe ich gerade gemacht.
Hier der Code. Der Pfad wird zuerst (wenn man auf "Durchsuchen" klickt)
in ein Eingabefeld kopiert, anschließend (auf "hinzufügen" geklickt) dem
Listenfeld hinzugefügt.Hier der Code:
void CSystemwartungDlg::OnBdurchsuchen() { CFileDialog ld(TRUE,NULL,NULL,NULL,"Ausführbare Dateien (*.exe)|*.exe||",NULL); ld.m_ofn.lpstrTitle = "Pfad des Sicherungsprogrammes auswählen"; if(ld.DoModal() == IDOK) m_sPfad = ld.GetPathName(); UpdateData(FALSE); } void CSystemwartungDlg::OnBhinzufuegen() { UpdateData(TRUE); if(PathFileExists(m_sPfad) == TRUE) { m_ctlProgramme.AddString(m_sPfad); m_sPfad = ""; UpdateData(FALSE); } else MessageBox("Bitte einen exisiterenden Pfad eingeben","Fehler",MB_OK|MB_ICONWARNING); GetDlgItem(IDC_BENTFERNEN)->EnableWindow(TRUE); }
IDC_BENTFERNEN = Button, der die Pfade wieder aus dem Listenfeld entfernt.
mfg
-
Hat keiner eine Ahnung oder wenigstens einen Link oder irgendetwas,
dass mich weiter bringt ???
Mfg
-
Wie soll ich Dir helfen, wenns bei mir funzt, bei Dir aber net .. musst Du also noch irgendwo nen Haken haben!
-
Ok, dann muss ich mir halt was anderes überlegen, trotzdem danke.