vc++ 2010 中文文件路径问题,使用unicode
首先建了个获取文件路径的对话框!然后CStringFileName;GetDlgItem(S1)->GetWindowTextW(FileName);//得到路径File...
首先建了个获取文件路径的对话框!
然后
CString FileName;
GetDlgItem(S1)->GetWindowTextW(FileName);//得到路径 FileName
char* tem//为了打开文件使用
中间加了一些从CString到char* 的变换,但怎么变换都不成功。只要含有中文路径就打开失败!
接着对文件操作,就会出错!中文路径名不能识别!
if ((fp=fopen(tem,"rb"))==nullptr)
{
MessageBox(NULL,_T("文件名无效!"));
//fclose(fp);
return;
}
请问如何解决?请详细点!我是新手!解决了会加分的!
对了,我使用的是vc++2010,解决问题可以一是转化路径,也可以换个其他读写文件的函数! 展开
然后
CString FileName;
GetDlgItem(S1)->GetWindowTextW(FileName);//得到路径 FileName
char* tem//为了打开文件使用
中间加了一些从CString到char* 的变换,但怎么变换都不成功。只要含有中文路径就打开失败!
接着对文件操作,就会出错!中文路径名不能识别!
if ((fp=fopen(tem,"rb"))==nullptr)
{
MessageBox(NULL,_T("文件名无效!"));
//fclose(fp);
return;
}
请问如何解决?请详细点!我是新手!解决了会加分的!
对了,我使用的是vc++2010,解决问题可以一是转化路径,也可以换个其他读写文件的函数! 展开
1个回答
展开全部
如果使用char*和fopen的话 ,需要注意自己转换的是否有问题。要知道,你是强制使用Unicode版函数取名称的GetWindowTextW(FileName);//
正常是调用"标准名称函数", GetWindowText();而由编译器的选项是否使用Unicode来决定该映射到GetWindowTextA还是W这种标准API上。
另外,文件的操作可以考虑CFile类等。
CString类有个运算符重载,返回字符串的指针,直接使用即可。
正常是调用"标准名称函数", GetWindowText();而由编译器的选项是否使用Unicode来决定该映射到GetWindowTextA还是W这种标准API上。
另外,文件的操作可以考虑CFile类等。
CString类有个运算符重载,返回字符串的指针,直接使用即可。
更多追问追答
追问
我通过建了个获取文件路径的对话框,获取了文件路径!
你能把以上程序给我,写一下吗?我是使用Unicode的!
另外,你说的CString类有个运算符重载,能给我个例子吗?
追答
void CTestDlgDlg::OnBnClickedButtonBrowse(){
CFileDialog dlg(TRUE, _T(".dat"), NULL, OFN_HIDEREADONLY | OFN_READONLY | OFN_FILEMUSTEXIST, _T("data files|*.dat|all files|*.*||"));
if(dlg.DoModal() == IDOK)
{
CString strFile = dlg.GetPathName();
GetDlgItem(IDC_EDIT_FILE)->SetWindowText(strFile);
GetDataFromFile(strFile); }
}
void CTestDlgDlg::GetDataFromFile(CString fileName){
CFile file;
CFileException ex = NULL;
BOOL bOpend = file.Open(fileName, CFile::modeRead, &ex); if(!bOpend)
{
TRACE(_T("File could not be opened %d\n"), ex.m_cause);
return;
}
char data[100]; UINT nCnt = file.Read(data, sizeof(data));
file.Close();
CString tip; tip.Format(_T("data length=%d"), nCnt);
AfxMessageBox(tip);
}
文件对话框和读文件的例子
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询