Russian Qt Forum
Ноябрь 24, 2024, 01:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: WinAPI выбор текущего каталога SetCurrentDirectory  (Прочитано 7024 раз)
zverek
Гость
« : Февраль 16, 2011, 22:13 »

помогите разобраться с функцией SetCurrentDirectory.
Код:
bool setCurDir(char *buf) {
if(::SetCurrentDirectory((LPCWSTR)buf)) {
return true;
}
return false;
}

когда в buf путь состоит из англ букв, все работает отлично. Но если там кирилица то функция возврощает false
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Февраль 16, 2011, 22:28 »

Что передаешь в setCurDir?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
zverek
Гость
« Ответ #2 : Февраль 16, 2011, 22:45 »

путь к каталогу.
Например: buf = "D 0 : 0 \ 0 s 0 o 0 f 0 t 0 0 0"  вообщем такой смысол  "D:\soft". Это все работает отлично, но если передаю "D:\музыка" то это уже не работает
Записан
BRE
Гость
« Ответ #3 : Февраль 16, 2011, 22:48 »

Я так понимаю, что эта функция ожидает unicode-строку.
А в какой кодировке передается "D:\музыка"?
Записан
zverek
Гость
« Ответ #4 : Февраль 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);
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Февраль 16, 2011, 23:22 »

В какой кодировке исходники сервера?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
zverek
Гость
« Ответ #6 : Февраль 16, 2011, 23:28 »

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("CP1251"));

в настройках проекта не какие изменения не вносил. Проект создан по умолчанию Visual Studio 2008. Юникод включен в настройках
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Февраль 16, 2011, 23:32 »

Как то нехорошо строку преобразуешь...
QByteArray QString::toUtf8 () const глянь.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
zverek
Гость
« Ответ #8 : Февраль 17, 2011, 22:43 »

Спасибо всем. Я решил свою проблему так
Код:
QString str = "D:\музыка";
LPCWSTR lpstr = str.utf16();
send(sock, (char *) lpstr, wcslen(lpstr)*2, 0);


На клиенте нече не изменял)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.126 секунд. Запросов: 23.