To co podał
Corvis zadziała zależnie od mapowania.
W tym poście opisałem to dokładnie:
http://programowanie.cal.pl/forum/viewtopic.php?f=16&t=1098#p7401Właściwie to
Corvis trochę namieszał, gdyż najpierw rzutuje to na zmienną
String (nie wiem po co), a potem dokonuje konwersji funkcjÄ…
w_str(), podczas gdy to rzutowanie jest zbędne, gdy tam już są zmienne typu String, więc wystarczy użyć funkcji
t_str(),
c_str() lub
w_str().
Ustaw mapowanie ma
wchar_t, a kod będzie wyglądał tak, przy założeniu, że zmienna
Path jest typu
String, czyli
UnicodeString:
MoveFile( ( ListBox1->Items->Strings[k] + "b.csw").t_str(), (Path + "Blablabla" + ListBox1->Items->Strings[k] + "b.csw").t_str() );
lub
(zalecam, gdyż zadziała niezależnie od mapowania):
MoveFile( ( ListBox1->Items->Strings[k] + "b.csw").c_str(), (Path + "Blablabla" + ListBox1->Items->Strings[k] + "b.csw").c_str() );
Gdybyś chciał przekazać funkcji jawnie ścieżki do plików, to wtedy nie używasz funkcji konwertujących, lecz stawiasz przed łańcuchem znaków
L.
MoveFile( L"c:\\temp\\plik.txt", L"d:\\plik.txt" );
String fDest = "d:\\plik.txt";
MoveFile( L"c:\\temp\\plik.txt", fDest.t_str() );
Ogólnie problem sprowadza się do tego, że funkcja
MoveFile oczekuje argumentów typu
wchar_t, a ty przekazujesz jej argumenty typu
UnicodeString (String - domyślnie UnicodeString). Dlatego konieczna jest konwersja.
W nowszych wersjach środowiska większość funkcji operuje już na zmiennych typu
wchar_t a nie
char dlatego zalecam ustawienie mapowania na ten typ.