Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с русскими буквами при преобразовании Cstring в char*

11K
28 января 2008 года
PhantomX
35 / / 10.04.2006
Пожалуйста помогите решить следующую проблему:

получаю путь к файлу следующим образом:

 
Код:
CFileDialog DlgOpenALG(TRUE,(LPCTSTR)(FTypeDefolt="txt"),NULL,OFN_HIDEREADONLY,(LPCTSTR)(FTypeFilter=" Text Files (*.txt) |*.txt||"));


затем в переменную копирую путь к полученному файлу

 
Код:
CString FileNameALG;
FileNameALG=DlgOpenALG.m_ofn.lpstrFile;


далее мне эту переменную необхлдимо преобразовать к типу char для возможности использовать fopen!!!
делаю это так:

Код:
FILE *falg;
char filename[255]="";
for(i=0;i<FileNameALG.GetLength();i++)
{
    filename=FileNameALG;
}
for(i=FileNameALG.GetLength();i<255;i++)
{
    filename=0;
}

if ((f= fopen(filename, "r"))==NULL)
{
    m_list_alg.AddString((s="не открылся ")+(s1=filename));
}


Если в пути файла только английские символы, то все нормально,
если встречаются русские, то при преобразовании типов получается белиберда и соответственно файл не открывается!
Пожалуйста помогите решить эту проблему.
1
28 января 2008 года
kot_
7.3K / / 20.01.2000
Цитата: PhantomX
Пожалуйста помогите решить следующую проблему:

получаю путь к файлу следующим образом:

CFileDialog DlgOpenALG(TRUE,(LPCTSTR)(FTypeDefolt="txt"),NULL,OFN_HIDEREADONLY,(LPCTSTR)(FTypeFilter=" Text Files (*.txt) |*.txt||"));

затем в переменную копирую путь к полученному файлу
CString FileNameALG;
FileNameALG=DlgOpenALG.m_ofn.lpstrFile;

далее мне эту переменную необхлдимо преобразовать к типу char для возможности использовать fopen!!!
делаю это так:

FILE *falg;
char filename[255]="";
for(i=0;i<FileNameALG.GetLength();i++)
{
filename=FileNameALG;
}
for(i=FileNameALG.GetLength();i<255;i++)
{
filename=0;
}

if ((f= fopen(filename, "r"))==NULL)
{
m_list_alg.AddString((s="не открылся ")+(s1=filename));
}

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


Используйте пожалуйста форматирование кода - эту мешанину текста и кода читать не возможно.
кроме того, что мешает использовать такой код, если вы используете класс CString - в нем оператор преобразования к С-строке определен:

 
Код:
....
LPCTSTR filename;
filename = (LPCTSTR)FileNameALG;

if ((f= fopen(filename, "r"))==NULL)
....

не забывайте о том что имя файла может быть wchar_t - и наверняка именно с этим у вас и связаны проблемы.
11K
29 января 2008 года
PhantomX
35 / / 10.04.2006
kot_,Очень извиняюсь за принесенные неудобства!

Ваш вариант не подходит.
Компилятор выдает следующую ошибку

error C2664: 'fopen' : cannot convert parameter 1 from 'LPCTSTR' to 'const char *'

Поэтому я и использовал по символьное конвертирование, но тут возникает проблема в случае когда есть русские буквы.

Есть ли другие варианты?
255
29 января 2008 года
Dart Bobr
1.4K / / 09.04.2004
Настройки проэкта проверьте. поставьте Use Multi-byte character set
1
29 января 2008 года
kot_
7.3K / / 20.01.2000
Цитата: PhantomX
kot_,Очень извиняюсь за принесенные неудобства!

Ваш вариант не подходит.
Компилятор выдает следующую ошибку

error C2664: 'fopen' : cannot convert parameter 1 from 'LPCTSTR' to 'const char *'

Поэтому я и использовал по символьное конвертирование, но тут возникает проблема в случае когда есть русские буквы.

Есть ли другие варианты?


Мой вариант подходит - если при этом и еще и самому приложить немного старания. Я ведь написал все в сообщении -

Цитата:
не забывайте о том что имя файла может быть wchar_t - и наверняка именно с этим у вас и связаны проблемы


- подробнее смотрите здесь или в сообщении Dart Bobr

11K
29 января 2008 года
PhantomX
35 / / 10.04.2006
При использовании Use Multi-byte character set проблема с текстом отпала, но интерфейс программы стал не объемным, а плоским, так и должно быть?

Проект создан в Visual studio 2005 SP1
тип проекта MFC-> dialog based
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог