C语言下有一套文件管理方案、C++语言下也有一套自己的文件管理方案、windows系统当然也有自己的一套文件管理方案啦。对于普通char类型为基础的字符使用哪种方案的解决办法都是一样的,但是对于宽字符wchar_t还是用windows自带的解决方案比较好。尤其对于中来说。

下面是windows文件读写编码转换相关的实例。

msdn上可以参考: http://msdn.microsoft.com/en-us/library/windows/desktop/aa364233%28v=vs.85%29.aspx

 // TEST__WINDOWSFILES.cpp : Defines the entry point for the console application.
// #include "stdafx.h" #include <iostream>
#include <string> static wchar_t arrwReadBuffer[] = {};
static char arrReadBuffer[] = {};
static char arrReadBuffer_UTF8[] = {}; bool test__OperatorFile()
{
bool ret = false;
HANDLE hFile = NULL;
//wchar_t arrReadBuffer[1024] = {0}; //test3.csv is UTF-16
hFile = CreateFileW(TEXT("test3.csv"), GENERIC_READ|GENERIC_WRITE, , NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE!=hFile)
{
if (TRUE==ReadFile(hFile, arrwReadBuffer, sizeof(arrwReadBuffer)-, NULL, NULL))
{
printf("%s\n", arrwReadBuffer);
std::wstring wstrReadBuffer(arrwReadBuffer);
std::wcout << wstrReadBuffer << std::endl; ret = true;
}
}
else
{
ret = false;
}
CloseHandle(hFile);
return ret;
}
bool test__OperatorFile2()
{
bool ret = false;
HANDLE hFile = NULL;
//char arrReadBuffer[1024] = {0}; //test1.csv is GB2312
hFile = CreateFileA(("test1.csv"), GENERIC_READ|GENERIC_WRITE, , NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE!=hFile)
{
if (TRUE==ReadFile(hFile, arrReadBuffer, sizeof(arrReadBuffer)-, NULL, NULL))
{
printf("%s\n", arrReadBuffer);
std::string strReadBuffer(arrReadBuffer);
std::cout << strReadBuffer << std::endl; ret = true;
}
}
else
{
ret = false;
}
CloseHandle(hFile);
return ret;
}
bool test__OperatorFile3()
{
bool ret = false;
HANDLE hFile = NULL;
//wchar_t arrReadBuffer[1024] = {0}; //test00.csv is UTF-16
hFile = CreateFileW(TEXT("test00.csv"), GENERIC_READ|GENERIC_WRITE, , NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE!=hFile)
{
if (TRUE==WriteFile(hFile, arrwReadBuffer, sizeof(arrwReadBuffer), NULL, NULL))
{ ret = true;
}
}
else
{
ret = false;
}
CloseHandle(hFile);
return ret;
}
bool test__OperatorFile4()
{
bool ret = false;
HANDLE hFile = NULL;
//wchar_t arrReadBuffer[1024] = {0}; //test01.csv is GB2312
hFile = CreateFileA(("test01.csv"), GENERIC_READ|GENERIC_WRITE, , NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE!=hFile)
{
if (TRUE==WriteFile(hFile, arrReadBuffer, sizeof(arrReadBuffer), NULL, NULL))
{ ret = true;
}
}
else
{
ret = false;
}
CloseHandle(hFile);
return ret;
}
bool test__OperatorFile5()
{
bool ret = false;
HANDLE hFile = NULL;
//char arrReadBuffer[1024] = {0}; //test2.csv is UTF-8
hFile = CreateFileA(("test2.csv"), GENERIC_READ|GENERIC_WRITE, , NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE!=hFile)
{
if (TRUE==ReadFile(hFile, arrReadBuffer_UTF8, sizeof(arrReadBuffer_UTF8)-, NULL, NULL))
{
printf("%s\n", arrReadBuffer_UTF8);
std::string strReadBuffer(arrReadBuffer_UTF8);
std::cout << strReadBuffer << std::endl; ret = true;
}
}
else
{
ret = false;
}
CloseHandle(hFile);
return ret;
}
bool test__OperatorFile6()
{
bool ret = false;
HANDLE hFile = NULL;
//wchar_t arrReadBuffer[1024] = {0}; //test02.csv is UTF-8
hFile = CreateFileA(("test02.csv"), GENERIC_READ|GENERIC_WRITE, , NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE!=hFile)
{
if (TRUE==WriteFile(hFile, arrReadBuffer_UTF8, sizeof(arrReadBuffer_UTF8), NULL, NULL))
{ ret = true;
}
}
else
{
ret = false;
}
CloseHandle(hFile);
return ret;
} CHAR *lpReadBuffer_UTF8 = NULL;
DWORD cbReadBuffer_UTF8 = ;
WCHAR *lpReadBuffer_UTF16 = NULL;
INT cchReadBuffer_UTF16 = ;
std::wstring wstrReadBuffer;
bool test__OperatorFile7()
{
bool ret = false;
HANDLE hFile = NULL;
//char arrReadBuffer[1024] = {0}; //test2.csv is UTF-8
hFile = CreateFileA(("test2.csv"), GENERIC_READ|GENERIC_WRITE, , NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE!=hFile)
{
cbReadBuffer_UTF8 = SetFilePointer(hFile, , NULL, FILE_END);
if (sizeof(CHAR)!=sizeof(BYTE))
{
return ret;
}
lpReadBuffer_UTF8 = (CHAR *)malloc( cbReadBuffer_UTF8 );
ZeroMemory(lpReadBuffer_UTF8, cbReadBuffer_UTF8);
SetFilePointer(hFile, , NULL, FILE_BEGIN); if (NULL!=lpReadBuffer_UTF8 && TRUE==ReadFile(hFile, lpReadBuffer_UTF8, cbReadBuffer_UTF8-, NULL, NULL))
{
lpReadBuffer_UTF16 = (WCHAR *)malloc( cbReadBuffer_UTF8*sizeof(WCHAR) );
ZeroMemory(lpReadBuffer_UTF16, cbReadBuffer_UTF8*sizeof(WCHAR));
cchReadBuffer_UTF16 = cbReadBuffer_UTF8;
if ( !=MultiByteToWideChar(CP_UTF8, , lpReadBuffer_UTF8, cbReadBuffer_UTF8, lpReadBuffer_UTF16, cchReadBuffer_UTF16) )
{
wstrReadBuffer = lpReadBuffer_UTF16;
std::wcout << wstrReadBuffer << std::endl; WCHAR *lpReadBuffer_UTF16_2 = (WCHAR *)malloc( cbReadBuffer_UTF8*sizeof(WCHAR) );
ZeroMemory(lpReadBuffer_UTF16_2, cbReadBuffer_UTF8*sizeof(WCHAR));
CopyMemory(lpReadBuffer_UTF16_2, wstrReadBuffer.c_str(), (wstrReadBuffer.length()+)*sizeof(WCHAR));
if (lpReadBuffer_UTF16_2)
free(lpReadBuffer_UTF16_2); WCHAR *lpReadBuffer_UTF16_3 = (WCHAR *)malloc( cbReadBuffer_UTF8*sizeof(WCHAR) );
ZeroMemory(lpReadBuffer_UTF16_3, cbReadBuffer_UTF8*sizeof(WCHAR));
lstrcpyn(lpReadBuffer_UTF16_3, wstrReadBuffer.c_str(), (wstrReadBuffer.length()+));
if (lpReadBuffer_UTF16_3)
free(lpReadBuffer_UTF16_3); ret = true; } if (lpReadBuffer_UTF16)
free(lpReadBuffer_UTF16);
} if (lpReadBuffer_UTF8)
free(lpReadBuffer_UTF8); }
else
{
ret = false;
}
CloseHandle(hFile);
return ret;
} WCHAR *lpWriteBuffer_UTF16 = NULL;
INT cchWriteBuffer_UTF16 = ;
CHAR *lpWriteBuffer_UTF8 = NULL;
INT cbWriteBuffer_UTF8 = ;
bool test__OperatorFile8()
{
bool ret = false;
HANDLE hFile = NULL;
//wchar_t arrReadBuffer[1024] = {0}; //test02.csv is UTF-8
hFile = CreateFileA(("test03.csv"), GENERIC_READ|GENERIC_WRITE, , NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE!=hFile)
{
cchWriteBuffer_UTF16 = wstrReadBuffer.length()+;
lpWriteBuffer_UTF16 = (WCHAR *)malloc( cchWriteBuffer_UTF16*sizeof(WCHAR) );
ZeroMemory(lpWriteBuffer_UTF16, cchWriteBuffer_UTF16*sizeof(WCHAR));
CopyMemory(lpWriteBuffer_UTF16, wstrReadBuffer.c_str(), cchWriteBuffer_UTF16*sizeof(WCHAR)); if (sizeof(CHAR)!=sizeof(BYTE))
{
return ret;
}
cbWriteBuffer_UTF8 = cchWriteBuffer_UTF16*sizeof(WCHAR);
lpWriteBuffer_UTF8 = (CHAR *)malloc(cbWriteBuffer_UTF8);
ZeroMemory(lpWriteBuffer_UTF8, cbWriteBuffer_UTF8); if (!=WideCharToMultiByte(CP_UTF8, , lpWriteBuffer_UTF16, cchWriteBuffer_UTF16, lpWriteBuffer_UTF8, cbWriteBuffer_UTF8, NULL, NULL))
{
SetFilePointer(hFile, , NULL, FILE_BEGIN);
if (TRUE==WriteFile(hFile, lpWriteBuffer_UTF8, cbWriteBuffer_UTF8, NULL, NULL))
{ ret = true;
} } if (lpWriteBuffer_UTF8)
free(lpWriteBuffer_UTF8); if (lpWriteBuffer_UTF16)
free(lpWriteBuffer_UTF16);
}
else
{
ret = false;
}
CloseHandle(hFile);
return ret;
} int _tmain(int argc, _TCHAR* argv[])
{
//std::cout << std::boolalpha << test__OperatorFile() << std::endl;
//std::cout << std::boolalpha << test__OperatorFile2() << std::endl;
//std::cout << std::boolalpha << test__OperatorFile3() << std::endl;
//std::cout << std::boolalpha << test__OperatorFile4() << std::endl;
//std::cout << std::boolalpha << test__OperatorFile5() << std::endl;
//std::cout << std::boolalpha << test__OperatorFile6() << std::endl;
std::cout << std::boolalpha << test__OperatorFile7() << std::endl;
std::cout << std::boolalpha << test__OperatorFile8() << std::endl; return ;
}

*注:编译环境VS2012。

具体源码我已打包上传:http://files.cnblogs.com/superstargg/TEST__WINDOWSFILES.zip

window FILES——windows文件管理相关实例的更多相关文章

  1. 【转贴】Windows常用命令实例

    Windows常用命令实例 https://www.cnblogs.com/linyfeng/p/6261629.html 熟练使用DOS常用命令有助于提高工作效率. 1.windows+R:打开运行 ...

  2. 重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的生命周期和程序的生命周期

    [源码下载] 重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的 ...

  3. Eucalyptus-利用镜像启动一个Windows Server 2008r2实例

    1.前言 使用kvm制作Eucalyptus镜像(Windows Server 2008r2为例)——http://www.cnblogs.com/gis-luq/p/3990792.html 上一篇 ...

  4. Linux文件管理相关命令

    Linux文件管理相关命令   作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在了解了Linux文件管理背景知识之后, 我们可以 ...

  5. SQL[连载2]语法及相关实例

    SQL[连载2]语法及相关实例 SQL语法 数据库表 一个数据库通常包含一个或多个表.每个表由一个名字标识(例如:"Websites"),表包含带有数据的记录(行). 在本教程中, ...

  6. Windows进程单实例运行

    场景         Windows进程单实例运行,如果有进程没有退出,继续等待,直到进程完全退出,才会进入下一个实例 HANDLE pHandle = NULL; do  {  pHandle = ...

  7. LoadLibrary文件路径及windows API相关的文件路径问题

    LoadLibrary HMODULE WINAPI LoadLibrary( _In_  LPCTSTR lpFileName ); Loads the specified module into ...

  8. 使用svnkit 的相关实例及相关问题汇总

    SVNKIT操作SVN版本库的完整例子 http://www.cnblogs.com/wangjiyuan/p/svnkitwanchenglizi.html#!comments 2.SVNClien ...

  9. windows 系统相关配置

    1. 外接显示器分辨率调节:连接上外接下显示器,在本机空白处,右键,分辨率.然后选择显示器,设置显示相关配置. 详见:http://zhidao.baidu.com/question/13494806 ...

随机推荐

  1. 嵌入式linux平台搭建

    选用Ubuntu12.04.2系统搭建平台.在原始系统下做如下更改: 将更新使用的服务器设置为国内“163”服务器 安装SSH,uboot—mkimage等软件 安装编译器“arm—2009q3”及相 ...

  2. Java-String之寻根问底

    Java-String之寻根问底 引言 在java编程中,几乎每天都会跟String打交道,因此,深入理解String及其用法十分有必要.下面分三方面来详细说明下String相关的特点及用法 •Imm ...

  3. ARCGIS 点抽稀的实现

    点抽稀是制图综合的一部分,即在点数据点特别密集是,需要选取比较重要的点而舍去不要重的点,使得图面整洁. 一.基本原理 先把所有的点符号都设成透明.这样显示是没有点的.然后给这些点设置标注.标注方法很奇 ...

  4. C#Stimulator项目>>>C/C++ DLL的生成和调用,Windows下的多线程

    Windows下的多线程 http://blog.csdn.net/ganpengjin1/article/category/2541791 使用C/C++建立DLL,环境VS2013 新建Win32 ...

  5. Yii 设置 flash消息 创建一个渐隐形式的消息框

    /*适用情况:比如提交一个表单,提交完成之后在页面展示一条提示消息. 控制器里面这样写: 单条消息: */ \Yii::$app->getSession()->setFlash('erro ...

  6. 关于PHP程序员解决问题的能力

    这个话题老生长谈了,在面试中必然考核的能力中,我个人认为解决问题能力是排第一位的,比学习能力优先级更高.解决问题的能力既能看出程序员的思维能力,应变能力,探索能力等,又可以看出他的经验.如果解决问题能 ...

  7. 我最喜欢的visual studio 2013的新特性

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:我最喜欢的visual studio 2013的新特性.

  8. unity3d中namespace的使用注意问题

    最近在重构游戏中的老一套逻辑,同时要加入新的功能逻辑,因为各种命名问题,就使用namespace进行控制.但是namespace在unity3d引擎中的使用与一般不同,需要注意一点:要作为Compon ...

  9. Ueditor自定义默认宽度高度

    如题. 最近需要使用到网页后台富文本编辑器.经过同学推荐,最后决定使用百度家的Ueditor. 官方地址:http://ueditor.baidu.com/website/ 贴吧地址:ueditor讨 ...

  10. Android 系统名字、版本、API level的对应关系

    从官网上找到的,具体地址是: http://source.android.com/source/build-numbers.html Code name Version API level Lolli ...