| 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 |