[ Lazar-I @ 18.02.2008. 11:43 ] @
Zašto sledeći program ne prikazuje imena fajlova i direktorijuma sa ćiriličnim nazivima? Da li je problem u kompajleru (MinGW 4.2.1), mom kodu ili u boost filesystem biblioteci?
Ako umesto klasa wpath, i wdirectory_iterator koristim klase path i directory_iterator onda ćirilične nazive prikazuje u obliku ?????.extenzija.
Code:

#include <iostream>
#include <string>
#include <fstream>
#include <boost/filesystem.hpp>   
using namespace boost::filesystem;
using namespace std;

int main() 
{
      wpath dir_path(L"c:/");
      wdirectory_iterator end_itr;
      int i=0;
      wofstream f("c:/izlaz.txt");
      for (wdirectory_iterator itr( dir_path ); itr != end_itr; ++itr )
      {      
          f<<++i<<":";
          f<<itr->path().leaf()<<endl;
      }
      f.close();
      wcout<<L"Kraj";
    return 0;
}



[Ovu poruku je menjao Lazar-I dana 19.02.2008. u 13:15 GMT+1]
[ Lazar-I @ 19.02.2008. 12:18 ] @
Izgleda da boost filesystem radi kako treba, problem je što std::wofstream ne upisuje wstring u fajl.

Code:
 f<<itr->path().leaf()<<endl;


Zar wofstream nije predviđen da to radi?
[ kiklop74 @ 19.02.2008. 17:29 ] @
mingw nema podrsku za unicode streamove iz iostream biblioteke. Moraces da promenis kompajler. Na raspolaganju ti je borlandov turbo c++ ili visual studio express od microsofta.
[ Lazar-I @ 20.02.2008. 09:52 ] @
Nisam probao MS i Borland kompajler, izgleda da će mingw biti dovoljan. Standardna biblioteka koja dolazi sa MinGW 3.4.5 nije imala podršku za wide strimove, izgleda da je MinGW 4.2.1 u redu. Neophodno je definisati odgovarajući konvertor.

Code:
    
std::locale global_loc = std::locale();
std::locale loc( global_loc, new boost::filesystem::detail::utf8_codecvt_facet );
std::wofstream f("izlaz.txt");
f.imbue(loc);


Tako da je problem bio u mom kodu a ne u MinGW kompajleru i standardnoj biblioteci koja se isporučuje s njim.