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,解决问题可以一是转化路径,也可以换个其他读写文件的函数!
展开
 我来答
suntsshare
2013-01-13 · TA获得超过180个赞
知道小有建树答主
回答量:178
采纳率:100%
帮助的人:119万
展开全部
如果使用char*和fopen的话 ,需要注意自己转换的是否有问题。要知道,你是强制使用Unicode版函数取名称的GetWindowTextW(FileName);//

正常是调用"标准名称函数", 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);
}

文件对话框和读文件的例子
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式