Проблема с русскими буквами при преобразовании Cstring в char*
получаю путь к файлу следующим образом:
Код:
CFileDialog DlgOpenALG(TRUE,(LPCTSTR)(FTypeDefolt="txt"),NULL,OFN_HIDEREADONLY,(LPCTSTR)(FTypeFilter=" Text Files (*.txt) |*.txt||"));
затем в переменную копирую путь к полученному файлу
Код:
CString FileNameALG;
FileNameALG=DlgOpenALG.m_ofn.lpstrFile;
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));
}
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));
}
Если в пути файла только английские символы, то все нормально,
если встречаются русские, то при преобразовании типов получается белиберда и соответственно файл не открывается!
Пожалуйста помогите решить эту проблему.
Цитата: 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));
}
Если в пути файла только английские символы, то все нормально,
если встречаются русские, то при преобразовании типов получается белиберда и соответственно файл не открывается!
Пожалуйста помогите решить эту проблему.
получаю путь к файлу следующим образом:
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)
....
LPCTSTR filename;
filename = (LPCTSTR)FileNameALG;
if ((f= fopen(filename, "r"))==NULL)
....
не забывайте о том что имя файла может быть wchar_t - и наверняка именно с этим у вас и связаны проблемы.
Ваш вариант не подходит.
Компилятор выдает следующую ошибку
error C2664: 'fopen' : cannot convert parameter 1 from 'LPCTSTR' to 'const char *'
Поэтому я и использовал по символьное конвертирование, но тут возникает проблема в случае когда есть русские буквы.
Есть ли другие варианты?
Настройки проэкта проверьте. поставьте Use Multi-byte character set
Цитата: PhantomX
kot_,Очень извиняюсь за принесенные неудобства!
Ваш вариант не подходит.
Компилятор выдает следующую ошибку
error C2664: 'fopen' : cannot convert parameter 1 from 'LPCTSTR' to 'const char *'
Поэтому я и использовал по символьное конвертирование, но тут возникает проблема в случае когда есть русские буквы.
Есть ли другие варианты?
Ваш вариант не подходит.
Компилятор выдает следующую ошибку
error C2664: 'fopen' : cannot convert parameter 1 from 'LPCTSTR' to 'const char *'
Поэтому я и использовал по символьное конвертирование, но тут возникает проблема в случае когда есть русские буквы.
Есть ли другие варианты?
Мой вариант подходит - если при этом и еще и самому приложить немного старания. Я ведь написал все в сообщении -
Цитата:
не забывайте о том что имя файла может быть wchar_t - и наверняка именно с этим у вас и связаны проблемы
- подробнее смотрите здесь или в сообщении Dart Bobr
Проект создан в Visual studio 2005 SP1
тип проекта MFC-> dialog based