Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VC++: Открытие файла с русским именем. Часть 2.

0 views
Skip to first unread message

Damir Tenisheff

unread,
Aug 24, 2007, 3:20:24 PM8/24/07
to
Рад приветствовать тебя All!

Кажется, разобрался - по крайней мере, в основном.
Итак, аккумулируя все советы, которые мне дали в эхах.

При установке UNICODE необходимо использовать std::wstring и макрос _T

std::wstring s(_T("c:\\тест\\kub.x"));
std::ifstream in(s.c_str());
if (!in)
::MessageBox(NULL,_T("BAD"),_T("BAD"),MB_OK);

и всё будет работать.

При установке Multi-byte Character Set можно обойтись без _T и можно
использовать std::string.
о нужно делать явный вызов setlocale

setlocale(LC_ALL, "Russian" );
std::string s("c:\\тест\\kub.x");
std::ifstream in(s.c_str());
if (!in)
::MessageBox(NULL,"BAD","BAD",MB_OK);

К сожалению, не смог добиться никакого эффекта от #pragma setlocale("russian").
Что-то делаю не так?

Остаются вопросы:
1. Как работают с русскими путями файлов приложения, которые ничего не знают ни
про Multi-Byte, ни про Unicode. И ведь работают же! И никаких проблем. Даже
win16-приложения работают!
2. Как быть в случае с Multi-Byte Character Set и setlocale и несколькими
языками? Пусть одновременно только два - английский и какой-то другой. о
другой-то может быть любым! Читать из настроек Windows?
3. Как делать правильно? Т.е. как писать в большом проекте, чтобы потом не
удивляться? Как сейчас делают все?
4. Что прочитать, чтобы никого не мучить такими простыми вопросами?

Удачи в бою!.. ;)
Damir.


0 new messages