Подскажите пожалуйста!
Использую в консольном приложении функцию FindFirstFile для получения списка файлов, но если запустить данную прогу на английской винде, то напапках с русским имене вылетает ошибка(как это победить?
Здравствуйте, BreakHeart, Вы писали:
BH>Подскажите пожалуйста! BH>Использую в консольном приложении функцию FindFirstFile для получения списка файлов, но если запустить данную прогу на английской винде, то напапках с русским имене вылетает ошибка(как это победить?
Здравствуйте, okman, Вы писали:
O>Здравствуйте, BreakHeart, Вы писали:
BH>>Подскажите пожалуйста! BH>>Использую в консольном приложении функцию FindFirstFile для получения списка файлов, но если запустить данную прогу на английской винде, то напапках с русским имене вылетает ошибка(как это победить?
O>Использовать FindFirstFileW.
Его-то и использую, но всеравно с русскими папками на английской(не локализованной) винде работать не хочет
Здравствуйте, BreakHeart, Вы писали:
BH>>>Подскажите пожалуйста! BH>>>Использую в консольном приложении функцию FindFirstFile для получения списка файлов, но если запустить данную прогу на английской винде, то напапках с русским имене вылетает ошибка(как это победить?
O>>Использовать FindFirstFileW. BH>Его-то и использую, но всеравно с русскими папками на английской(не локализованной) винде работать не хочет
Тогда расскажите, какая именно ошибка и куда вылетает.
Вопрос — что передается в lpszDirFile и других параметрах ?
Бывает так, что литералы (на русском) закодированы прямо в исходниках, а при компиляции они
попадают в бинарник в совсем другом виде (кракозябрами).
Если вставить MessageBox в начале функции, передав ему lpszDirFile, что будет показано в окне ?
O>Вопрос — что передается в lpszDirFile и других параметрах ? O>Бывает так, что литералы (на русском) закодированы прямо в исходниках, а при компиляции они O>попадают в бинарник в совсем другом виде (кракозябрами). O>Если вставить MessageBox в начале функции, передав ему lpszDirFile, что будет показано в окне ?
Изначально там передаётся имя диска, а потом туда подставляется еще и имя папки из cAlternateFileName
А разве MessageBox работает в консоли?
Здравствуйте, BreakHeart, Вы писали:
BH>MessageBox возвращает кракозябры и на lpszDirFile,и на cAlternateFileName
Ну так вот Вам и причина.
MessageBoxW — юникодная функция, способна отображать русские символы на любой локализации.
А у Вас она печатает кракозябры.
Значит, кракозябры получаются еще где-то до вызова функции.
Рискну предположить, что они у Вас задаются литералами прямо в коде программы, при том,
что сами исходники не в Unicode, вероятнее всего.
Здравствуйте, okman, Вы писали:
O>Здравствуйте, BreakHeart, Вы писали:
BH>>MessageBox возвращает кракозябры и на lpszDirFile,и на cAlternateFileName
O>Ну так вот Вам и причина. O>MessageBoxW — юникодная функция, способна отображать русские символы на любой локализации. O>А у Вас она печатает кракозябры. O>Значит, кракозябры получаются еще где-то до вызова функции. O>Рискну предположить, что они у Вас задаются литералами прямо в коде программы, при том, O>что сами исходники не в Unicode, вероятнее всего.
Так в том-то и проблема, что всё в юникоде.В параметрах проекта стоит юникод.Везде вызываются W-функции,а кракозябры возвращаются в cAlternateFileName функцией FindFirst(Next)File
Здравствуйте, BreakHeart, Вы писали:
BH>Так в том-то и проблема, что всё в юникоде.В параметрах проекта стоит юникод.Везде вызываются W-функции,а кракозябры возвращаются в cAlternateFileName функцией FindFirst(Next)File
Я имел в виду кодировку файлов .cpp, в которых у Вас исходный код программы.
Попробуйте сохранить их в UTF-16, а затем заново ввести все русские символы и пересобрать приложение.
Должно заработать, увидите.
Здравствуйте, BreakHeart, Вы писали:
BH>Подскажите пожалуйста! BH>Использую в консольном приложении функцию FindFirstFile для получения списка файлов, но если запустить данную прогу на английской винде, то напапках с русским имене вылетает ошибка(как это победить?
После установки Windows, но до того, как добавлена русская локаль через Control Panel , FAR показывает вместо русских имен знаки ????. Русский установлен ?
Здравствуйте, okman, Вы писали:
O>Здравствуйте, BreakHeart, Вы писали:
BH>>Так в том-то и проблема, что всё в юникоде.В параметрах проекта стоит юникод.Везде вызываются W-функции,а кракозябры возвращаются в cAlternateFileName функцией FindFirst(Next)File
O>Я имел в виду кодировку файлов .cpp, в которых у Вас исходный код программы. O>Попробуйте сохранить их в UTF-16, а затем заново ввести все русские символы и пересобрать приложение. O>Должно заработать, увидите.
Последовательно перечисляет папки на моем диске E — $RECYCLE.BIN, Documents and Settings,
Program Files, WINDOWS, а также (внимание!) Алёна, Фотки и другие, кириллицей.
Винда английская, в региональных настройках для программ, не поддерживающих юникод,
стоит "English (United States).
O>Последовательно перечисляет папки на моем диске E — $RECYCLE.BIN, Documents and Settings, O>Program Files, WINDOWS, а также (внимание!) Алёна, Фотки и другие, кириллицей. O>Винда английская, в региональных настройках для программ, не поддерживающих юникод, O>стоит "English (United States).
cFileName у меня тоже нормально отображается,а вот cAlternateFileName не хочет(
Здравствуйте, okman, Вы писали:
O>Здравствуйте, BreakHeart, Вы писали:
BH>>cFileName у меня тоже нормально отображается,а вот cAlternateFileName не хочет(
O>Так это же формат 8.3 — чего же тут ожидать. O>У меня, к примеру, папка "Фотки" в 8.3 отображается как 7866~1.
А можно как-нибудь получить короткое имя чтобы можно было обратиться к папке на другом языке?
Здравствуйте, BreakHeart, Вы писали:
BH>Здравствуйте, okman, Вы писали:
O>>Здравствуйте, BreakHeart, Вы писали:
BH>>>cFileName у меня тоже нормально отображается,а вот cAlternateFileName не хочет(
O>>Так это же формат 8.3 — чего же тут ожидать. O>>У меня, к примеру, папка "Фотки" в 8.3 отображается как 7866~1. BH>А можно как-нибудь получить короткое имя чтобы можно было обратиться к папке на другом языке?
Не понял.
Все, что связано с языковыми баръерами, преодолевается при помощи Unicode.
Никаких имен в стиле 8.3 или еще чего-то такого для этого не нужно.
У Вас где-то ошибка в коде (до вызова функции, которую Вы показывали), из-за этого проблема.
Кстати, из консоли кириллица по дефолту не показывается, нужно локаль задавать.
Можете глянуть, на всякий случай, вот сюда — http://www.rsdn.ru/forum/winapi/4467360.1.aspx
Здравствуйте, BreakHeart, Вы писали:
BH>Везде вызываются W-функции
Похоже что это не так.
Попробуй везде принудительно написать W в конец имени функции.
Скорее всего у тебя вызываются A версии.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока