Dateiendung nachträglich ändern



  • Hi,

    vielleicht könnt ihr mir helfen:
    ich habe vergessen beim erstellen des mfc progamms gleich zu beginn die dateiendung festzulegen, welche bei "datei öffnen/speichern" ausgewählt sein soll.
    wie kann ich diese im nachhinein noch auf zb "txt" ändern/einstellen?

    vielen Dank



  • Im Ordner Quellcodedateien hast Du eine Datei namens DeinName.rc (bei mir Tag 10.rc)
    Hier ist ein Eintrag

    STRINGTABLE PRELOAD DISCARDABLE 
    BEGIN
        IDR_MAINFRAME           "Tag 10\n\nTag10\nDateityp Tag10 (*.dhc)\n.dhc\nTag10.Document\nTag10 Document"
    END
    

    Ändere hier (.dhc) in (.txt)

    Das war´s



  • hmm ich finde zwar die Zeile, aber nicht den Eintrag.
    Bei mir steht:

    STRINGTABLE PRELOAD DISCARDABLE 
    BEGIN
        IDR_MAINFRAME           "Kundenumsatz\n\nKunden\n\n\nKundenumsatz.Document\nKunden Document"
        IDD_DIAGRAMM            "Diagramm zum Kunden anzeigen"
    END
    

    habe auch das probiert:

    STRINGTABLE PRELOAD DISCARDABLE 
    BEGIN
        IDR_MAINFRAME           "Kundenumsatz\n\nKunden\n\n\nKundenumsatz (*.txt)\nKunden Document"
        IDD_DIAGRAMM            "Diagramm zum Kunden anzeigen"
    END
    

    .. keinen Erfolg.

    Vielleicht hast Du noch eine Idee?



  • Hat keiner eine weitere Idee?
    Oder geht sowas nicht?



  • Also ich weiß nich ab das hier dir was bringt, aber ich würd vielleicht einfach die funktion selbst schreiben....

    CFileDialog f(false,"","",0,"Text-dateien|*.txt|\0",this); 
    f.DoModal();
    

    MFG

    Hansi



  • also das ist gar nicht so schlecht...
    aber: wenn ich eine Funktion für onFileOpen einfüge ruft er den Speichern-Dialog auf ???
    Und ich mußte this am ende rauslöschen da CFileDialog keine 6 Parameter aktzeptiert. Ohne dem gehts wie gesagt zum speichern.
    Ich habe dann false auf true gesetzt und schon konnte ich öffnen, ABER das Prg öffnet nicht meine Datei die ich sonst ohne Problme einladen konnte.

    Vielleicht kannst Du mir da noch ein paar Tips geben.
    Danke und der Ansatz ist schon supi.
    Muß ich dann die Serielisierung auch dorthin verschieben oder aufrufen?

    edit: ahh bin ich blöd, ich glaube ich verstehe schon, natürlich muß ich
    danach noch div. Sachen erledigen lassen... 🕶
    Na mal sehen.

    THX für den Tip!



  • Komisch bei mir gehts gehts sowohl mit als auch ohne this. Naja is ja auch egal. Das das programm die datei nicht öffnet dürfte normal sein...
    du musst den pfad, den du mit

    f.GetPathName()
    

    "weiterverarbeiten" z. B. mit WinExec() eine exe- datei ausführen oder so was ähnliches

    MFG

    Hansi



  • thx.

    das laden habe ich ebend schon allein hin bekommen... *freu*
    aber beim speichern bricht er ab, aber der compiler meldet keine fehler.
    nun bin ich doch ein wenig ratlos.

    hier mal mein Code fürs laden (das geht) und speichern:

    void CKundenumsatzDoc::OnFileOpen() 
    {
    	// TODO: Code für Befehlsbehandlungsroutine hier einfügen
    	CString m_sResultat;
    
    	CFileDialog dlg (true,NULL,NULL,NULL,"Textdateien(*.txt)|*.txt||");
    	dlg.DoModal();
    		m_sResultat = dlg.GetFileName();
    
    		CFile file;
    		CFileException fe;
    
    		if (file.Open(m_sResultat,CFile::typeBinary | CFile::modeRead, &fe))
    		{
    		CArchive ar(&file, CArchive::load);
    		Serialize(ar);
    
    		CDaten obj;
    
    		//"Hilfsvariable" benötigt, da man sonst nicht auf die Protected Variablen in CKunde.h zugreifen kann
    		//Werte werden in Hilfsvariable gespeichert und dann per Object obj mit den Set Funktionen der einzelnen Variablen
    		//in dem Object gespeichert		
    
    		int anz;
    		ar >> anz;
    
    		for(int i=0; i<anz;i++)
    		{
    			CString name;				// temporäre Variable zum speichern der geladenen Variable
    			ar >> name;					// Wert von Datei in Temp-Var packen
    			obj.SetName(name);			// von Temp-Var in die protectet Varible
    
    			int nummer;
    			ar >> nummer;
    			obj.SetNummer(nummer);
    
    			float umsatz1;
    			ar >> umsatz1;
    			obj.SetUmsatz1(umsatz1);
    
    			float umsatz2;
    			ar >> umsatz2;
    			obj.SetUmsatz2(umsatz2);
    
    			float umsatz3;
    			ar >> umsatz3;
    			obj.SetUmsatz3(umsatz3);
    
    			//Hier wird das Object mit einem kompletten Kunden als Inhalt in das Array geschrieben
    			m_arrDaten.Add(obj);
    
    		}
    	}
    	UpdateAllViews(NULL);
    }
    //--------------------------------------------------------------------------------------------------------------
    void CKundenumsatzDoc::OnFileSaveAs() 
    {
    	// TODO: Code für Befehlsbehandlungsroutine hier einfügen
    	CString m_sResultat;
    
    	CFileDialog dlg (false,NULL,NULL,NULL,"Textdateien(*.txt)|*.txt||");
    	dlg.DoModal();
    		m_sResultat = dlg.GetFileName();
    
    		CFile file;
    		CFileException fe;
    
    		// file exists with read & write permissions
    		CArchive ar(&file, CArchive::store);
    		Serialize(ar);
    
    		CDaten obj;							// objekt ableiten von CDaten
    
    		//Göße des Arrays holen mittels GetSize()
    		int anz = m_arrDaten.GetSize();
    
    		//mittels Schleife die Kunden in der Datei speichern
    		ar << anz;
    
    		for(int i=0; i<anz; i++)
    		{			
    			ar << m_arrDaten.GetAt(i).GetName();		// speichern der einzelnen Elemente eines Kunden
    			ar << m_arrDaten.GetAt(i).GetNummer();   
    			ar << m_arrDaten.GetAt(i).GetUmsatz1();
    			ar << m_arrDaten.GetAt(i).GetUmsatz2();
    			ar << m_arrDaten.GetAt(i).GetUmsatz3();
    		}
    }
    

    die Komentare sind für mich (da ich noch neuling bin) und ich habe sie jetzt nicht extra rausgelöscht



  • Also damit hab ich leider noch gar nicks gemacht. Tut mir leid.
    Ich bin auch noch ziemlicher anfänger.

    MFG

    Hansi



  • Versuch mal

    IDR_MAINFRAME           "Kundenumsatz\n\nKundenumsatz\nTextdatei (*.txt)\n.txt\nKundenumsatz.Document\nKundenumsatz Document"
    


  • DANKE DANKE,

    funktioniert,ist ja echt genial!

    @MOD: vielleicht kann man das ja in die FAQ aufnehmen

    Gruß Radelt


Anmelden zum Antworten