Aus Datei lesen geht nicht richtig



  • Das Problem ist folgendes. Ich habe eine Datei geschrieben (Thread: http://www.c-plusplus.net/forum/viewtopic-var-t-is-197871.html) und will die nun wieder auslesen. Folgenden Code verwende ich

    void cTestDlg::OnConfigurationLoadconfig()
    {
    	CFileDialog cDialog(TRUE, 0, 0, 4|2, _T("Config (*.ltd) |*.ltd||"), 0 ,0);
    	CString Buffer;
    	int Index = 0;
    
    	if(cDialog.DoModal() == IDOK)
    	{
    		CStdioFile File;
    		File.Open(cDialog.GetPathName(), CFile::modeRead);
    
    		while(File.ReadString(Buffer))
    		{
    			MessageBox(Buffer, NULL, MB_OK);
    			Index++;
    		}
    
    		File.Close();
    	}
    }
    

    Wenn ich den Code ausführe gibt er mir nur ein Zeichen aus der Datei aus und macht danach sofort schluss. In der Datei sind aber mind. 6 Zeilen mit jeweils 2-3 Zeichen

    Inhalt:
    232
    344
    12
    336
    34
    576

    Die funkton gibt mir immer "2" aus und das nur ein mal.
    Hab hier im Forum viele Beiträge zum Thema gefunden, und die sind identisch zu meienr Funktion. Warum klappts bei mir nicht? In einem anderen programm läufts problemlos...



  • Hab den Fehler noch nicht gefunden, aber festgestellt das es mit deinem Code in einem Multibyte Projekt funktioniert. In einem Unicode Projekt hingegen nicht. Vllt. hilft das wem weiter das Problem zu lösen.



  • wozu Index++?

    Und schau mal, was genau in 'cDialog.GetPathName()' steht?!

    Ansonsten versuch mal:

    File.Open( cDialog.GetPathName(), CFile::modeRead | CFile::typeBinary );
    

    Bei mir funzt das in einem Unicode Projekt.

    grüssle 🙂

    edit: stell den Filename mal in eine CString Vari rein, und mit der dann File.Open...
    hab da schon Pferde vor der Apotheke gesehen ...

    Und nicht zu vergessen: Nach dem Open noch File.SeekToBegin();



  • Smitty schrieb:

    Bei mir funzt das in einem Unicode Projekt.

    Es funzt in einem Unicode Projekt aber nur, wenn du eine selbst erstellte ltd Datei einliest.
    Es wird nicht klappen, wenn du die Datei mit dem Code des Threaderstellers in einem Unicode Projekt erzeugst(http://www.c-plusplus.net/forum/viewtopic-var-t-is-197871.html)und anschliessend wieder mit dem o.g. Code einliest. Dann wird nur das 1. Zeichen ausgegeben

    //Edit: mit typeBinary klappts dann 😃 😃 😃



  • Danke für die schnellen Hilfen.

    Das Index++ ist eigentlich dafür da, dass ich die gelesenen Daten in einen Array reinschiebe. Damit lässt sich schön weiterarbeiten.

    Und schau mal, was genau in 'cDialog.GetPathName()' steht?!

    Steht der richtige Pfad drin.

    edit: stell den Filename mal in eine CString Vari rein, und mit der dann File.Open...
    hab da schon Pferde vor der Apotheke gesehen ...

    Öhm was soll das bringen? CDialog.GetPathName() liefert mir doch einen netten string mit der ganzen Pfadangabe, wo alles drin ist. Und öffnen tut ers auch.

    Ich hab jetzt

    CFile::modeRead | CFile::typeBinary
    

    eingebaut und es geht nun. Weiß zwar immer nocht nicht genau warum (vllt. kann mir das einer mal erklären).



  • Hi versuch mal nach dem:
    CFileDialog cDialog(TRUE, 0, 0, 4|2, _T("Config (.ltd) |.ltd||"), 0 ,0);
    Noch das hier einzufügen:
    cDialog DoModal();

    Dann muss es eigentlich gehen. Musst aber halt die Datei aussuchen die du lesen willst.


Anmelden zum Antworten