Russian Qt Forum

Программирование => С/C++ => Тема начата: zverek от Февраль 16, 2011, 22:13



Название: WinAPI выбор текущего каталога SetCurrentDirectory
Отправлено: zverek от Февраль 16, 2011, 22:13
помогите разобраться с функцией SetCurrentDirectory.
Код:
bool setCurDir(char *buf) {
if(::SetCurrentDirectory((LPCWSTR)buf)) {
return true;
}
return false;
}

когда в buf путь состоит из англ букв, все работает отлично. Но если там кирилица то функция возврощает false


Название: Re: WinAPI выбор текущего каталога SetCurrentDirectory
Отправлено: Пантер от Февраль 16, 2011, 22:28
Что передаешь в setCurDir?


Название: Re: WinAPI выбор текущего каталога SetCurrentDirectory
Отправлено: zverek от Февраль 16, 2011, 22:45
путь к каталогу.
Например: buf = "D 0 : 0 \ 0 s 0 o 0 f 0 t 0 0 0"  вообщем такой смысол  "D:\soft". Это все работает отлично, но если передаю "D:\музыка" то это уже не работает


Название: Re: WinAPI выбор текущего каталога SetCurrentDirectory
Отправлено: BRE от Февраль 16, 2011, 22:48
Я так понимаю, что эта функция ожидает unicode-строку.
А в какой кодировке передается "D:\музыка"?


Название: Re: WinAPI выбор текущего каталога SetCurrentDirectory
Отправлено: zverek от Февраль 16, 2011, 23:06
Возможно не правильно перевожу строку.
вообщем в клиенте так:
Код:
recv(sock, buf, sizeof(buf), 0);
bool fl = setCurDir(buf);
Код:
bool setCurDir(char *buf) {
return ::SetCurrentDirectory((LPCWSTR)buf);
}


на сервере:
Код:
QString str = "D:\музыка";
int j = 0;
for(int i=0; i<str.size(); i++) {
c = str.at(i).toAscii();
if(c != '/0') {
           buf[j] = c;
j=j+2;
}
}
send(sock, buf, j, 0);


Название: Re: WinAPI выбор текущего каталога SetCurrentDirectory
Отправлено: Пантер от Февраль 16, 2011, 23:22
В какой кодировке исходники сервера?


Название: Re: WinAPI выбор текущего каталога SetCurrentDirectory
Отправлено: zverek от Февраль 16, 2011, 23:28
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("CP1251"));

в настройках проекта не какие изменения не вносил. Проект создан по умолчанию Visual Studio 2008. Юникод включен в настройках


Название: Re: WinAPI выбор текущего каталога SetCurrentDirectory
Отправлено: Пантер от Февраль 16, 2011, 23:32
Как то нехорошо строку преобразуешь...
QByteArray QString::toUtf8 () const глянь.


Название: Re: WinAPI выбор текущего каталога SetCurrentDirectory
Отправлено: zverek от Февраль 17, 2011, 22:43
Спасибо всем. Я решил свою проблему так
Код:
QString str = "D:\музыка";
LPCWSTR lpstr = str.utf16();
send(sock, (char *) lpstr, wcslen(lpstr)*2, 0);


На клиенте нече не изменял)