VC的fopen函数第一个参数是const char*,一旦遇到中文文件名就难以应付了,如果中文是UTF8编码的话,我们还可以用下列代码将其转换为UNICODE,然后用_wfopen函数打开文件。
代码如下:
bool UTF8ToUnicode(const char* UTF8, wchar_t* strUnicode)
{
DWORD dwUnicodeLen; //转换后Unicode的长度
TCHAR *pwText; //保存Unicode的指针
// wchar_t* strUnicode; //返回值
//获得转换后的长度,并分配内存
dwUnicodeLen = MultiByteToWideChar(CP_UTF8,0,UTF8,-1,NULL,0);
pwText = new TCHAR[dwUnicodeLen];
if (!pwText)
{
return false;
}
//转为Unicode
MultiByteToWideChar(CP_UTF8,0,UTF8,-1,pwText,dwUnicodeLen);
//转为CString
wcscpy(strUnicode, pwText);
//清除内存
delete []pwText;
return true;
}
这个函数的用法如下:
wchar_t strUnicode[260];
UTF8ToUnicode(streamName, strUnicode);
FILE* fid = _wfopen(strUnicode, L"rb");
// FILE* fid = fopen(streamName, "rb");//此为原来的方法,遇到中文不能正确打开
上述函数仍有不够完善之处,如参数strUnicode的长度不能灵活设置,读者可根据自身需求进一步加以完善!
您可能感兴趣的文章:VC MFC非模态对话框的实现方法VC中实现GB2312、BIG5、Unicode编码转换的方法VC实现屏幕截词功能的方法详解VC取得任务栏高度的方法VC定制个性化的MessageBox解决方法VC实现动态菜单的创建方法VC++创建msi文件的方法VC实现A进程窗口嵌入到B进程窗口中显示的方法VC++实现输出GIF到窗体并显示GIF动画的方法VC++中的字体设置方法详解VC实现获取本机MAC地址的方法