Mehrere Dateitypen mit SDI Programm

intGeneSys

Grünschnabel
Hallo meine Lieben,

Ich steht im Moment vor folgendem Problem: Ich habe vor mir eine SDI MFC-Anwendung die mit den Framework funktionen OnOpenDocument und Serialize die Anwendungsdaten wunderbar ein- und ausliest.
Jetzt zum Problem: Zusätzlich zu meinem Datentyp (*.rhi) den ich nun also definiert habe, sollte es auch möglich sein einen weiteren Datentyp (ordinäre *.txt) einlesen zu können (Beide Dateien beinhalten gleiche Information, haben allerdings (logischerweise) ein anderes Dateiformat).

Meine Frage nun: Ein Arbeitskollege hat mir gesagt, es gäbe einen Weg die Funktionen zu überladen (OnOpenDocument und Serialize) um so das ganze im Framework zu belassen (vor allem wg. "Datei -> Öffnen Dialog" u.ä.) -- was muss in den überladenen Funktionen stehen um die Dateitypen zu unterscheiden?

Ich google jetzt schon rund 'ne Stunde um was passendes zu finden, aber ausser allgemeinen Tutorials rund ums serialisieren finde ich leider nichts passendes -- ich vermute ich suche nach den falschen Keywords ;).

Über Lösungsansätze, Stichwörter (nach was ich suchen könnte um eine Lösung zu erhalten) und weitere Hilfe wäre ich sehr dankbar :)

Herzlichen Dank!
 

langer1801

Erfahrenes Mitglied
Hallo,

ich mache es so, dass ich in der Funktion zum Einlesen (oder auch speichern) der Datei ein CArchive erzeuge und in CDokument eine zweite Serialize-Funkrton definiere.
Hier ein Auszug. Serialize1 ist die Funktion im Dokument:
Code:
	CFile f;
	int error;
	char buf[512];
	CMyFileDialog m_File(TRUE, "", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
		"Patientendateien  (*.pat)|*.pat| Alle Dateien|*.*||");
	if(m_File.DoModal()==IDOK)
	{
		CString m_strFilename = m_File.GetPathName();
		if( !f.Open( m_strFilename, CFile::modeRead ) )
		{
			#ifdef _DEBUG
			afxDump << "Unable to open file" << "\n";
			exit( 1 );
			#endif
		}
		CArchive ar( &f, CArchive::load, 512, buf );
		error=pDoc->Serialize1(ar);
		if(error==1)
			MessageBox("Falscher Dateityp","Meldung",MB_OK|MB_ICONINFORMATION);
		else if(error==2)
			MessageBox("Patient existiert schon","Meldung",MB_OK|MB_ICONINFORMATION);
		ar.Close();
		f.Close();

Vielleicht hilft dir das ja.

Mfg

langer