skovv Temat założony przez niniejszego użytkownika |
Kopiowanie pliku z polskimi znakami w ścieżce » 2014-10-13 20:21:11 Witam ponownie :]
W swoim programie zasoby wrzucam poprzez okno dialogowe lub drag and drop i obie funkcje zwracają mi prawidłową ścieżkę do pliku. Mam jednak problem, bo funkcja CopyFile(..) z windows.h nie obsługuje chyba polskich znaków. Co mogę na to poradzić? |
|
pekfos |
» 2014-10-13 20:30:47 Zmień na CopyFileW(). |
|
skovv Temat założony przez niniejszego użytkownika |
» 2014-10-13 21:12:40 Niestety to samo bool FileCopy( string from, string to ) { std::wstring stemp = std::wstring( from.begin(), from.end() ); std::wstring stemp2 = std::wstring( to.begin(), to.end() ); LPCWSTR lFrom = stemp.c_str(); LPCWSTR lTo = stemp2.c_str(); if( CopyFileW( lFrom, lTo, false ) ) return true; else return false; } |
|
pekfos |
» 2014-10-13 21:17:16 std::wstring stemp = std::wstring( from.begin(), from.end() );
|
Tak nie wyczarujesz polskich znaków z std::string. Powinieneś od początku do końca trzymać ścieżki w std::wstring, lub zastosować jakąś prawdziwą konwersję. |
|
DejaVu |
» 2014-10-13 21:18:31 Nie wiem skąd czerpiesz inspirację na tworzenie takiego kodu, ale zmień źródło :) Tak jak pekfos napisał, konwersję między ANSI a UNICODE trzeba wykonać racjonalnie, lub po prostu używać unikodowych nazw. bool FileCopy( std::wstring _from, std::wstring _to ) { return::CopyFileW( _from.c_str(), _to.c_str(), false ) ? true : false; }
FileCopy( L"żółąź.txt", L"łóążś.txt" );
/edit: Polecam Ci poczytać: http://cpp0x.pl/kursy/Kurs-WinAPI-C++/Zaawansowane/Unicode-w-WinAPI/201. To może być dla Ciebie całkiem dobre wprowadzenie do Unicode-a. |
|
skovv Temat założony przez niniejszego użytkownika |
» 2014-10-14 00:11:07 Wybaczcie, ale moja głowa już dziś nie mysli.. Gdy używam czegoś takiego, to nie działa nawet jeśli w ścieżce nie ma polskich znaków.. std::wstring s2ws( const std::string & str ) { int size_needed = MultiByteToWideChar( CP_UTF8, 0, & str[ 0 ],( int ) str.size(), NULL, 0 ); std::wstring wstrTo( size_needed, 0 ); MultiByteToWideChar( CP_UTF8, 0, & str[ 0 ],( int ) str.size(), & wstrTo[ 0 ], size_needed ); return wstrTo; }
Nie mogę używać wstring bo i tak funkcja d&d zwraca mi char*, po za tym w silniku wszystko śmiga mi na stringach. |
|
DejaVu |
» 2014-10-14 00:20:03 Bo Ty nie używasz kodowania UTF8... to i konwersja do Unicode nie wychodzi prawidłowa... |
|
skovv Temat założony przez niniejszego użytkownika |
» 2014-10-14 23:02:15 To jak to powinno wyglądać? Mógłbyś pomóc? |
|
« 1 » 2 |