Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Kopiowanie pliku z polskimi znakami w ścieżce

Ostatnio zmodyfikowano 2014-10-22 10:24
Autor Wiadomość
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ć?
P-118398
pekfos
» 2014-10-13 20:30:47
Zmień na CopyFileW().
P-118400
skovv
Temat założony przez niniejszego użytkownika
» 2014-10-13 21:12:40
Niestety to samo
C/C++
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; //CopyFile( from.c_str(), to.c_str(), false ) ) return true;
    else return false;
   
}
P-118415
pekfos
» 2014-10-13 21:17:16
C/C++
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ę.
P-118419
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.

C/C++
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.
P-118420
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..
C/C++
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.
P-118453
DejaVu
» 2014-10-14 00:20:03
Bo Ty nie używasz kodowania UTF8... to i konwersja do Unicode nie wychodzi prawidłowa...
P-118454
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?
P-118497
« 1 » 2
  Strona 1 z 2 Następna strona