(MFC mit dem...) Writefile und CString



  • Wenn ich versuche einen CString in eine Datei zu speichern wird die Länge des Strings zwar richtig erkannt, jedoch wird dieser String getrennt mit hex 00 abgespeichert:
    z.B. Eingabe 12345
    MessagBox meldet 12345
    in der Datei steht 1 2 3
    WIESO?
    Bitte dringend um Hilfe
    Danke im Voraus



  • Ich würde sagen du hast Unicode aktiviert.

    // Länge in Bytes:
    CString str;
    str.GetLength() * sizeof TCHAR;
    


  • Danke für deine schnelle Antwort
    Das klappt dennoch irgendwie nicht...
    hier ist der Teil der mir Probleme macht!

    Ich gebe z.B. eine Id des Typs CString ein, anschließend speicher ich diese und das Problem habe ich immer noch... Wenn ich jedoch den CString in Int konvertiere und diesen wiederrum in Char dann funktioniert das Ganze, jedoch habe ich dann Probleme wenn ich nur 0000 eingebe!!!

    Was mache ich falsch!
    (Kann ich Dir das Programm zukommen lassen?)
    Danke



  • Du könntest einfach Unicode deaktivieren...

    oder z.B.

    CString str("Mein Text");
    
        int count = str.GetLength();
        char* temp = new char[count + 1];
    
        for(int i = 0;i < count;++i)
            temp[i] = static_cast<char> (static_cast<LPCTSTR> (str)[i]);
        temp[count] = 0x00;
    
        // Was mit temp machen
    
        delete[] temp;
    

    Du könntest auch jedes Zeichen einzeln in die Datei schreiben.



  • @Nemesyzz

    temp[i] = static_cast<char> (static_cast<LPCTSTR> (str)[i]);
    

    Nöö, wohl eher so:

    temp[i] = static_cast<char>(static_cast<TCHAR>(str[i]));
    


  • Nein das war schon richtig.
    Ich wollte nich den überladenen []-Operator von CString nehmen da er die Werte kopiert und nicht eine Referenz zurückgibt.



  • Ist nach ASM übersetzt sicherlich das gleiche, aber statt

    temp[i] = static_cast<char>(static_cast<TCHAR>(str[i]));
    

    kann man auch gleich

    temp[i] = static_cast<char>(str[i]);
    

    schreiben.
    Hat aber eigentlich nix mit API zu tun, oder?



  • Tach auch,

    also Eure Vorschläge funktionieren bei mir nicht:-(( Ich verzweifel langsam, desshalb hier der Code
    So solls rauskommen:
    In der Datei AUSLAGERN.TXT soll stehen "Mein Text" und "M e i n T e x t"

    void CXDlg::OnSave() 
    {
       // TODO: Add your control notification handler code here
        CString str("Mein Text");
    
        int count = str.GetLength();
        char* temp = new char[count + 1];
    
        for(int i = 0;i < count;++i)
            temp[i] = static_cast<char> (static_cast<LPCTSTR> (str)[i]);
        temp[count] = 0x00;
    
       //Filehandling
       hFile = CreateFile (TEXT("AUSLAGERN.TXT"),  
                          GENERIC_READ|GENERIC_WRITE,         
                         FILE_SHARE_READ,        
                        NULL,                   
                       OPEN_ALWAYS,          
                      0,                  
                      NULL);                  
    
          do
          {
             if(ReadFile(hFile,buff,16384,&dwBytesRead,NULL))
             {
                dwPos=SetFilePointer(hFile,0,NULL,FILE_END);
                WriteFile(hFile,"S<K>",4,&dwFileLen,NULL);
                WriteFile(hFile,str,20,&dwFileLen,NULL);
                WriteFile(hFile,"\r\n",2,&dwFileLen,NULL);
             }
          }while(dwBytesRead==16384);
    
       if (hFile == INVALID_HANDLE_VALUE)
       {
          // Your error-handling code goes here.
          AfxMessageBox(_T("Fehler beim Schreiben"));
          return;
       }
       else 
          CloseHandle(hFile);
       delete[] temp;   
    }
    

    BITTE HELFT MIR!!!

    edit:
    Codetags hinzugefügt.

    [ Dieser Beitrag wurde am 21.11.2002 um 21:02 Uhr von cd9000 editiert. ]


Anmelden zum Antworten