wifstream und Unicode im Verzeichnis-Pfad



  • Hi,

    warum kann ich mit folgendem Code über wifstream die Datei nicht öffnen. Mit Umlauten funktioniert es, aber sobald andere internationale Zeichen im Verzeichnispfad sind geht es nicht mehr. wifstream sollte doch Unicode verstehen 😕

    P.S. Diese komischen Zeichen ("& # 1085;" etc.) sind beim Einfügen entstanden, im Code sind das Unicode-Zeichen

    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
     wifstream sourceFile;
     wchar_t Temp[512];
    
     sourceFile.open( L"C:\\Temp\\Log на 23.09.2011г\\Test.txt", ios::in );
     //sourceFile.open( L"C:\\Temp\\ÄÖÜ~äöüß\\Test.txt", ios::in );
    
     if ( !sourceFile.good() )
       {
    	ShowMessage("Error open file");
    	return;
       }
    
     Memo1->Clear();
     while ( !sourceFile.eof() )
    	  {
    	   sourceFile.getline( Temp, 512 );
    	   Memo1->Lines->Add( Temp );
    	  }
    }
    


  • Ich vermute mal, weil der Pfad bzw. der String des Pfades kein Unicode ist. Die sind erst ab C++11 möglich. Du solltest dir deshalb mal Boost Filesystem anschauen. Das kann damit umgehen und bietet ein paar mehr Features.



  • Hi Artchi,

    danke für den Tip, ich werde mir das Boost FS mal anschauen, aber der C++Builder XE sollte doch auch so aktuell sein das man Unicode überall lesen kann ?

    Was meinst du mit "String des Pfades kein Unicode ..." ?
    Wenn ich mit dem gleichen String über FileExists() abfrage, bekomme ich eine positive Rückmeldung, dann sollte der String doch i.O. sein, oder ?



  • Es geht um die C++-Std-Bibliothek und nicht um die Borland-Bibliotheken. FileExist() ist sicherlich keine ISO-C++-Funktion, sondern eine von Borland die dann die Win32-API nutzt.
    Die Filestreams von C++ nutzen logischerweise intern auch die Win32-API (kann ja nicht anders gehen), aber die std::string-Klasse bzw. char ist kein Unicode. Boost FS bietet eine erweiterte Filestream-Klasse an, die einen Unicode-String im Konstruktor anbietet.


Anmelden zum Antworten