CFileDialog Textdatei öffnen und auslesen



  • Ich möchte im CFileDialog eine Textdatei auswählen, die Datei auslesen und das ganze dann in einem Textfeld anzeigen lassen.

    Folgendes habe ich:

    TCHAR str[1000];
    CFileDialog m_ldFile(TRUE,"txt","*.txt",OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY,"Text-Dateien *.txt",this);
    CString m_pathname; 
    if (m_ldFile.DoModal() == IDOK)
    {
          m_pathname = m_ldFile.GetPathName();
    }
    CFile datei(m_pathname, CFile::modeRead); 
    datei.Read(str, sizeof(str)); 
    datei.Close(); 
    m_strOutput = str;
    UpdateData(FALSE);
    

    Es funktioniert aber nicht. ich bekomme den Text nicht angezeigt.

    Bitte Code-TAG´s benutzten

    mfG Dominik

    [ Dieser Beitrag wurde am 14.01.2003 um 09:33 Uhr von C-O-M-M-A-N-D-E-R editiert. ]



  • Du muss noch ein

    m_pathname += m_ldFile.GetFileName();
    

    einfügen! Mit GetPathName() erhälst du nur den Pfad (z.B: "c:\ordner\")
    aber nicht den namen der datei!somit weiss er ja nicht was er auslesen soll.
    Mit GetFileName() bekommst du den Filename (z.B: "datei.txt") das hängst du mit dem "+=" einfach noch an den String dran..
    Dann sollte es klappen...



  • Der Dateiname wird mit dem Befehl GetPathName auch ausgelesen. Die datei hat er. Ich weis auch nicht, ob er die Datei nicht öffnet oder nicht liest.

    mfG



  • Hi!
    Prüfen, ob die Datei geöffnet werden konnte, kannst du so:

    CFile datei;
    if(datei.Open(m_pathname, CFile::modeRead)
    {
     datei.Read(str, sizeof(str)); 
     datei.Close(); 
     m_strOutput = str;
    }
    UpdateData(FALSE);
    


  • ohhh ja, sorry hatte mich verschaut...
    Sehe gerade das Laie mir meine Antwort vorweg genommen hat 🙂



  • Prima funktioniert jetzt super. Ich hatte ein Problem mit der Ausgabe Variable.

    mfG



  • Wie kann ich jetzt aber in eine Textdatei speichern. Ich habe nur Rechtecke in der Textdatei.

    CFileDialog m_ldFile(FALSE,"txt","*.txt",OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY,"Text-Dateien *.txt",this);

    if (m_ldFile.DoModal() == IDOK)

    {
    TCHAR str[1000];
    CString m_sFilePath ="";
    m_sFilePath = m_ldFile.GetPathName();

    _tcscpy(str,m_strOutput);
    CFile datei(m_sFilePath, CFile::modeCreate | CFile::modeWrite);
    datei.Write(str, sizeof(str));
    datei.Close();
    }

    mfG Dominik



  • War Quatch 😃

    [ Dieser Beitrag wurde am 14.01.2003 um 13:15 Uhr von Laie editiert. ]



  • Die Variable m_strOutput ist eine Membervariable. Ich vermute mal das sie nach dem String den Rest mit Leerzeichen auffüllt. Wie bekomme ich es hin das Sie nach dem String keine Leerzeichen mehr auffüllt.



  • m_strOutput.TrimRight();
    m_strOutput.TrimLeft();



  • häng doch mal an die variable ein "\n\r" dran...
    sollte dem abhilfe verschaffen!



  • TCHAR str[2000];
    _tcscpy(str,m_strOutput);

    Daran lag es nicht. Das Problem scheint er mit der Variable str zu haben da diese ja 2000 Zeichen haben soll. kennt einer noch eine Möglichkeit.

    mfG



  • CStdioFile datei(m_pathname,[Open-Parameter]);
    datei.WriteString(m_strOutput + "\n");
    

    So schonmal probiert??



  • Ne bringt mir nix. Mein Problem ist die feste Größe von TChAR str[2000]. Die müsste ich irgendwie Variable bekommen.



  • Also damit kriegst du garantiert keine leere Zeichen in dei Array:

    char str[2000];
    strcpy(str,m_strOutput);

    Du kannst es in Debugmodus auch prüfen



  • Das funktioniert auch nicht, Da die Größe der Variablen str auf 2000 steht. Den rest füllt er immer noch auf. Anbei nochmal den ganzen Code.

    CFileDialog m_ldFile(FALSE,"txt","*.txt",OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY,"Text-Dateien *.txt",this);
    
        m_strOutput.TrimLeft();
        m_strOutput.TrimRight();
        CString m_sFilePath ="";
    
        char str[2000];
        strcpy(str,m_strOutput);
    
        if (m_ldFile.DoModal() == IDOK)
    
        {   
            m_sFilePath = m_ldFile.GetPathName();
            CFile datei(m_sFilePath, CFile::modeCreate | CFile::modeWrite); 
            datei.Write(str, sizeof(str)); 
            datei.Close();
            MessageBox("Die Startdatei wurde erfolgreich angelegt!", "Datei gespeichert");
        }
    


  • Versuch mal so:

    .....
        if (m_ldFile.DoModal() == IDOK)
    
        {   
            m_sFilePath = m_ldFile.GetPathName();
            CFile datei(m_sFilePath, CFile::modeCreate | CFile::modeWrite);
            datei.Write(str, m_strOutput.GetLength()); 
            datei.Close();
        }
    .....
    

    [ Dieser Beitrag wurde am 14.01.2003 um 15:44 Uhr von Laie editiert. ]



  • Hi,

    warum das Theater mit dem Umwandeln?

    Schreibe

    datei.Write(m_strOutput.GetBuffer(), sizeof(m_strOutput));
    

    doch gleich deinen CString rein.

    Grüße, Volle.



  • Stimmt nicht ganz:
    sizeof(m_strOutput) gibt immer 4.

    Also:

    datei.Write(m_strOutput.GetBuffer(m_strOutput.GetLength()), m_strOutput.GetLength());

    und nicht vergessen:
    m_strOutput.ReleaseBuffer();



  • Danke Super. Das ist genau das was ich gesucht habe. Kann ich das gleiche auch beim Lesen machen.

    CFileDialog m_ldFile(TRUE,"txt","*.txt",OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY,"Text-Dateien *.txt",this);
    
        char str[2000] ="\0";
        CString m_pathname;
    
        if (m_ldFile.DoModal() == IDOK)
        {
            m_sFilePath = m_ldFile.GetPathName();
            CFile datei(m_sFilePath, CFile::modeRead); 
            datei.Read(str, sizeof(str));
            datei.Close(); 
            m_strOutputDatei = str;
            UpdateData(FALSE);
    


  • Hi,

    ja, klar. Das war ein Schreibfehler. Tut mir Leid.

    Gruß, Volle.


Anmelden zum Antworten