Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Функция opendir не может открыть папку на русском


Автор: Ivan1 25.6.2014, 16:06
Здравствуйте.Часть кода с функцией opendir:
Код

...
DIR *dir;
struct dirent * dir_entry;
if((dir=opendir(name_dir))==NULL)
{
    cout<<"Error"<<endl;
}
...

Если открывать директорию с именем на русском языке, то выдается ошибка. Если переименовать эту директорию на английском языке или цифрами и еще раз попробовать открыть, то ошибки нет. Подскажите как решить эту проблему?Зарание спасибо.

Автор: xvr 26.6.2014, 11:31
Какая ОС и какая кодировка символов с строке 'на русском языке'? Если Window, то кодировка должна совпадать с текущей локалью системы (cp1251 скорее всего), для Linux - UTF-8 (IMHO)

Автор: Ivan1 26.6.2014, 11:51
Цитата(xvr @ 26.6.2014,  11:31)
Какая ОС и какая кодировка символов с строке 'на русском языке'? Если Window, то кодировка должна совпадать с текущей локалью системы (cp1251 скорее всего), для Linux - UTF-8 (IMHO)

ОС:Windows XP
Среда разработки:Dev-C++
Текущую локаль системы не знаю.
Как узнать текущую локаль системы и  как поменять кодировку?

Автор: xvr 26.6.2014, 12:24
Цитата(Ivan1 @  26.6.2014,  11:51 Найти цитируемый пост)
Текущую локаль системы не знаю.

Если у вас русская windows, то локаль системы - cp1251.

Цитата(Ivan1 @  26.6.2014,  11:51 Найти цитируемый пост)
 как поменять кодировку?

Смотрите функции http://msdn.microsoft.com/en-us/library/windows/desktop/dd319072%28v=vs.85%29.aspx и http://msdn.microsoft.com/en-us/library/windows/desktop/dd374130%28v=vs.85%29.aspx
А лучше сразу переходите на Unicode и/или родные Windows функции (http://msdn.microsoft.com/en-us/library/windows/desktop/aa364418%28v=vs.85%29.aspx, http://msdn.microsoft.com/en-us/library/windows/desktop/aa364428%28v=vs.85%29.aspx, http://msdn.microsoft.com/en-us/library/windows/desktop/aa364413%28v=vs.85%29.aspx)
  

Автор: Ivan1 26.6.2014, 13:01
Цитата

...Смотрите функции MultiByteToWideChar и WideCharToMultiByte...

Спасибо.Посмотрю.)
Цитата

...А лучше сразу переходите на Unicode...

А как перейти на Unicode?

Автор: xvr 26.6.2014, 18:12
Цитата(Ivan1 @  26.6.2014,  13:01 Найти цитируемый пост)
А как перейти на Unicode? 

В настройках проекта (прямо на первой странице) ставите 'Character Set' в 'Use Unicode character set' (это если у вас английская версия студии). Но учтите, что и в самой программе вам придется это предусмотреть - все вызовы Win32 API теперь будут принимать строки не в виде char*, а в виде wchar_t*

Автор: EgoBrain 27.6.2014, 03:43
Цитата(Ivan1 @ 26.6.2014,  13:01)
Цитата

...Смотрите функции MultiByteToWideChar и WideCharToMultiByte...

Спасибо.Посмотрю.)
Цитата

...А лучше сразу переходите на Unicode...

А как перейти на Unicode?

Готовься к тому что скорее всего ты г*вна не оберешься от этого перехода, и будешь недобро вспоминать xvr
Советую вначале прочеть небольшую статейку рассвого жида Джоеля Спольски, ксатит и название статии как бы намекает:
http://local.joelonsoftware.com/wiki/%D0%90%D0%B1%D1%81%D0%BE%D0%BB%D1%8E%D1%82%D0%BD%D1%8B%D0%B9_%D0%9C%D0%B8%D0%BD%D0%B8%D0%BC%D1%83%D0%BC,_%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B9_%D0%9A%D0%B0%D0%B6%D0%B4%D1%8B%D0%B9_%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA_%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE_%D0%9E%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D1%8F_%D0%9E%D0%B1%D1%8F%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D0%94%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD_%D0%97%D0%BD%D0%B0%D1%82%D1%8C_%D0%BE_Unicode_%D0%B8_%D0%9D%D0%B0%D0%B1%D0%BE%D1%80%D0%B0%D1%85_%D0%A1%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D0%BE%D0%B2

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)