Speichern mit verschiedenen Dateitypen



  • Hallo zusammen!

    Ich würde es in meiner Anwendung gerne möglich machen, dass man das aktuelle Dokument in mehreren Formaten speichern kann. (Es geht um Messkurven eines Oszilloskops)
    Bis jetzt verwendet mein Programm nur einen eigenen Dateityp (*.osc), es wäre jedoch auch gut, wenn man die Daten zusätzlich als *.txt, *.csv ö.ä. abspeichern könnte.

    Daher will ich entweder:
    - in meinem Save-As-Dialog eine Auswahl der verschiedenen Typen ermöglichen
    - oder einen neuen Menüeintrag "Datei->Export als txt..." erstellen.

    Meine Probleme dabei sind folgende:
    1.) Wie schaffe ich es in CFileDialog mehrere Dateitypen zu ermöglichen und wie lese ich aus, welchen Typ der Benutzer gewählt hat? (dazu muss ich doch wahrscheinlich das OPENFILENAME struct ändern, aber wo und wie mache ich das???)

    2.) Wie kann ich dann in meiner Serialize-Methode unterschiedlich auf den ausgewählten Typ reagieren? (Die Werte müssen dann ja in anderer Reihenfolge und Struktur in die Datei geschrieben werden)

    Gruß
    Brainiac

    EDIT: Ich benutze VC++ 6.0



  • Also ich bin nun schon ein großes Stück weitergekommen, stoße aber immer wieder auf neue Probleme.

    Ich hab mir nun einen Menüeintrag "Export als txt" erstellt, zu dem folgende Methode gehört:

    [cpp]void COszi2Doc::OnFileTxt() 
    {
    	CFileDialog SpeicherDlg(FALSE);
    
    	SpeicherDlg.m_ofn.lpstrTitle = "Export als txt";
    	SpeicherDlg.m_ofn.lpstrFilter = "Text-Dateien (*.txt)\0*.txt\0Alle Dateien (*.*)\0*.*\0\0\0";
    	SpeicherDlg.m_ofn.lpstrDefExt = "txt";
    	strcpy(SpeicherDlg.m_ofn.lpstrFile,"unbenannt.txt");
    
    	if(IDOK == SpeicherDlg.DoModal())
    	{
    		CFile OutputDatei(SpeicherDlg.m_ofn.lpstrFile, CFile::modeWrite| CFile::shareDenyNone);
    		CArchive ar(&OutputDatei,CArchive::store);
    
    		ar<<"Zeit\tData1\tData2\n"; //Fehler!!!
    
    	}	
    }[/cpp]
    

    Ich dachte, jetzt könnte ich mit ar<< einfach drauf los speichern, ich bekomme jedoch beim Kompilieren den Fehler:

    error C2593: 'Operator <<' ist mehrdeutig

    Kann mir das jemand erklären??? CArchiv überläd den Operator doch eindeutig, wieso denn dann mehrdeutig? 😕

    Danke und Gruß Brainiac 🙂

    PS: Sieht jemand sonst noch Fehler in obigem Code? Bin da nämlich n bisschen unsicher, weil ich zum ersten mal CFile/CArchive außerhalb der "normalen" Serialize-Methode verwende.



  • Wenn du CStdioFile nimmst, kannst du WriteString nehmen. 🙂
    CArchive habe ich leider noch nie benutzt.



  • Vielen Dank estartu!

    CStdioFile und WriteString sind genau das richtige für meine Zwecke. Damit klappts! 🙂

    Danke und Gruß
    Brainiac


Anmelden zum Antworten