VC下实现fopen支持中文的方法_C 语言

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
, 方法
, 中文
fopen
vc6 实现多语言版、vc fopen、vc fopen操作、vc fopen s、c语言 fopen,以便于您获取更多的相关知识。

时间: 2024-08-03 00:00:59

VC下实现fopen支持中文的方法_C 语言的相关文章

C++实现Linux下弹出U盘的方法_C 语言

本文实例讲述了C++实现Linux下弹出U盘的方法.分享给大家供大家参考.具体如下: 在linux下,对于usb设备,我们一般都是mount上使用,不使用时umount掉就可以了. 在ubuntu10.04中,当我们插入u盘时,会出现u盘设备,当我点击这个设备就可以mount上u盘,并读取里面的文件,当我们不使用时,我们再次点击这个设备就可以弹出这个设备,如果想再次使用U盘,那么就得必须再次插拔u盘才可以. umount和弹出u盘是不同的,umount后我们还可以再次mount上使用,我们的u盘

VC++获得当前进程运行目录的方法_C 语言

本文实例讲述了VC++获得当前进程运行目录的方法,分享给大家供大家参考.具体实现方法如下: 该实例主要通过利用windows API获得,具体代码如下:   复制代码 代码如下: CString GetAppPath() {   CString strAppPath;  // 保存结果   TCHAR szModuleFileName[MAX_PATH]; // 全路径名   TCHAR drive[_MAX_DRIVE];  // 盘符名称,比如说C盘啊,D盘啊   TCHAR dir[_MA

VC基于ADO技术访问数据库的方法_C 语言

本文实例讲述了VC基于ADO技术访问数据库的方法.分享给大家供大家参考.具体如下: 一.在StdAfx.h文件中添加 复制代码 代码如下: #import "C:/Program Files/Common Files/System/ado/msado15.dll" no_namespace rename("EOF","rsEOF") 导入ADO引擎. 二.数据库应用层操作 void CADOExample1Dlg::OnBtnQuery() {

VC实现Windows多显示器编程的方法_C 语言

本文实例讲述了VC实现Windows多显示器编程的方法.分享给大家供大家参考.具体如下: 一.Windows中接入多个显示器时,可设置为复制和扩展屏. 1.设置为复制屏幕时,多个显示器的分辨率是一样的,位置为0~分辨率值 2.设置为扩展屏幕时,显示器之间的关系比较复杂些.首先Windows系统会识别一个主显示器,这个可以在屏幕分辨率中更改.多个显示器之间的位置关系也可以再屏幕分辨率中更改.其中主显示器的位置为(0,0)到(width,height),其他显示器位置由与主显示器的位置关系决定,在主

VC MFC非模态对话框的实现方法_C 语言

众所周知的,MFC中非模态对话框在显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切换.本文就来给大家讲解一下非模态对话框的实现方法: 一.非模态对话框的对话框资源和对话框类 实际上,模态对话框和非模态对话框在创建对话框资源和生成对话框类上是没有区别的,因此,在创建模态对话框时所创建的IDD_TIP_DIALOG对话框资源和CTipDlg类都不需要修改. 二.创建及显示非模态对话框的步骤 需要修改的是,对话框类实例的创建和显示,也就是之前在CAdditionDlg::OnBnCli

VC实现批量删除指定文件的方法_C 语言

本文所述实例主要实现了删除某个盘符下指定位置的文件,可以是TXT.doc.jpeg等格式,只要选定格式后,再定义好盘符,即可一键删除所有指定类型的文件.再次提示删除前请确认,且删除后不可恢复. 以下是最主要的核心代码,其它代码读者可以自己添加. SHFILEINFO shInfo; memset(&shInfo,0,sizeof(SHFILEINFO)); HIMAGELIST hImage = (HIMAGELIST)SHGetFileInfo("C:\\",0,&s

VC打印word,excel文本文件的方法_C 语言

本文实例讲述了VC里打印word,excel文本文件的方法.分享给大家供大家参考.具体实现方法如下: 1. Vc打印Excel: 关于VC如何打开一个excel,这方面的资料很多了,一般用的是OLE Avtive Control/假设当你打开了一个excel文件,并获得了它的 workbook的handle,相应的接口为: 复制代码 代码如下: COleVariant covTrue((short)true); COleVariant covFalse((short)FALSE); COleVa

VC动态生成菜单项的实现方法_C 语言

本例所述为使用VC编写的一个可以动态生成菜单项的类文件,这里展示的是其核心代码,代码备有比较详细的注释,相对而言理解起来并不复杂. 主要功能代码如下: #include "stdafx.h" #include "Test.h" #include "TestDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序"关于"菜单项的 CAboutDlg 对话框 class

解析在WTL下使用双缓冲的实现方法_C 语言

使用WTL的CDoubleBufferImpl类可以方便的实现双缓冲,而不必自己实现繁琐的代码,不仅可以绘制一般窗口,也可以绘制对话框的背景等.首先 #include <atlframe.h>其次需要双缓冲画图的类需要派生自CDoubleBufferImpl<>:class CMainDlg : public CDialogImpl<CMainDlg>, public CDoubleBufferImpl<CMainDlg>{}然后消息链中加入BEGIN_MS