Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/30: Рейтинг темы: голосов - 30, средняя оценка - 4.77
0 / 0 / 1
Регистрация: 26.11.2011
Сообщений: 6
1

Русские буквы в пути к файлу

17.01.2012, 20:07. Показов 5784. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите разобраться с проблемой.

Имеется проект в Visual Studio2005 на основе диалогового окна (Project Types: MFC; Application Type: DialogBased; включена поддержка Unicode).
Нужно организовать вывод данных в файл, расположенный в произвольном месте на жестком диске с помощью объекта ofstream.
Если в полном пути к файлу нет русских букв, то следующий код работает нормально:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <fstream>
using namespace std;
 
void CComm3Dlg::OnBnClickedOk()
{
    // TODO: Add your control notification handler code here
    //OnOK();
 
    ofstream os;
    os.open("D:\\Temp\\Test.txt",ofstream::out);
 
    for (int i=0; i<10; i++)
        os<<i<<"\n";
 
    os.close();
 
}
CComm3Dlg – класс диалогового окна, вывод происходит в ответ на щелчок по кнопке OK.

Если в строке пути к файлу есть кириллица, например:

C++
1
os.open("D:\\Мусор\\Test.txt",ofstream::out);
то файл для вывода не открывается (проект компилируется, но os=false и файл “Test.txt” не создается). Я так понимаю, что при наличии русских букв нужно использовать строку wchar_t*. Пробовал делать так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <fstream>
using namespace std;
 
//Функция, преобразующая char* в wchar_t*
wchar_t* ctow(const char* pc, size_t max) {
    wchar_t* pw=new wchar_t[max];
    mbstowcs(pw,pc,max);
    return pw;
}
 
void CComm3Dlg::OnBnClickedOk()
{
    // TODO: Add your control notification handler code here
    //OnOK();
 
    const wchar_t* pwc=ctow("D:\\Мусор\\Test.txt",100);
 
    ofstream os;
    os.open(pwc,ofstream::out);
    
 
    for (int i=0; i<10; i++)
        os<<i<<"\n";
 
    os.close();
    delete[] pwc;
 
}
Никакого эффекта, все тоже самое.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.01.2012, 20:07
Ответы с готовыми решениями:

Русские буквы в пути к файлу
sf:=('C:\Учебное\text_file.txt'); AssignFile(f, sf); Rewrite(f); writeln(f, t); ...

Не поддерживает русские буквы в пути к файлу
Путь с английскими буквами прекрасно работает, но вот если русские буквы есть в пути к файлу, то...

Компилятор не принимает русские символы в пути к файлу
Всем привет! Прописываю путь к файлу, для того чтобы считать с него данные. Когда в пути нет...

Заменить в исходном файле русские буквы ‘к’ на буквы ‘т’, буквы ‘т’ на буквы ‘к’, буквы ‘л’ на буквы ‘в’, буквы ‘в’ на
Задание: Заменить в исходном файле русские буквы ‘к’ на буквы ‘т’, буквы ‘т’ на буквы ‘к’, буквы...

1
374 / 321 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
18.01.2012, 18:03 2
Цитата Сообщение от Lindeman1976 Посмотреть сообщение
Я так понимаю, что при наличии русских букв нужно использовать строку wchar_t*.
Вовсе нет. Юникод нужно использовать, если вы используете функции, работающие с символами Юникода.
А вот это не Юникод:
Цитата Сообщение от Lindeman1976 Посмотреть сообщение
const wchar_t* pwc=ctow("D:\\Мусор\\Test.txt",100);
А вот это Юникод:
C++
1
const wchar_t* pwc=ctow([B][COLOR="Red"]L[/COLOR][/B]"D:\\Мусор\\Test.txt",100);
Но если работает с латинницей, то проблема не в этом.
0
18.01.2012, 18:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.01.2012, 18:03
Помогаю со студенческими работами здесь

Скрипт копирования пути к файлу\папке и вставка пути в письмо Outlook
Всем доброго времени суток! Помогите, пож-та, разобраться\дописать скрипт. Есть скрипт на...

Расположить латинские буквы в начале строки, отсортированные по алфавиту, а русские буквы в конце
ПОЖАЛУЙСТА ПОМОГИТЕ блондинке:) раньше не было фортрана а перевелася на другой факультет и сразу...

Русские символы в пути к jar
Столкнулся с нетривиальной проблемой. Команда C:\Documents and Settings\Alexandr&gt;java -jar...

Lotus C Api и русские пути к базам...
Знаю что называть файлы по-русски плохо, но так &quot;исторически сложилось&quot;... Есть библиотека для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru