首页 > 代码库 > window FILES——windows文件管理相关实例
window FILES——windows文件管理相关实例
C语言下有一套文件管理方案、C++语言下也有一套自己的文件管理方案、windows系统当然也有自己的一套文件管理方案啦。对于普通char类型为基础的字符使用哪种方案的解决办法都是一样的,但是对于宽字符wchar_t还是用windows自带的解决方案比较好。尤其对于中来说。
下面是windows文件读写编码转换相关的实例。
msdn上可以参考: http://msdn.microsoft.com/en-us/library/windows/desktop/aa364233%28v=vs.85%29.aspx
1 // TEST__WINDOWSFILES.cpp : Defines the entry point for the console application. 2 // 3 4 #include "stdafx.h" 5 6 #include <iostream> 7 #include <string> 8 9 10 static wchar_t arrwReadBuffer[1024] = {0}; 11 static char arrReadBuffer[1024] = {0}; 12 static char arrReadBuffer_UTF8[1024] = {0}; 13 14 15 bool test__OperatorFile() 16 { 17 bool ret = false; 18 HANDLE hFile = NULL; 19 //wchar_t arrReadBuffer[1024] = {0}; 20 21 22 //test3.csv is UTF-16 23 hFile = CreateFileW(TEXT("test3.csv"), GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 24 if (INVALID_HANDLE_VALUE!=hFile) 25 { 26 if (TRUE==ReadFile(hFile, arrwReadBuffer, sizeof(arrwReadBuffer)-1, NULL, NULL)) 27 { 28 printf("%s\n", arrwReadBuffer); 29 std::wstring wstrReadBuffer(arrwReadBuffer); 30 std::wcout << wstrReadBuffer << std::endl; 31 32 ret = true; 33 } 34 } 35 else 36 { 37 ret = false; 38 } 39 CloseHandle(hFile); 40 return ret; 41 } 42 bool test__OperatorFile2() 43 { 44 bool ret = false; 45 HANDLE hFile = NULL; 46 //char arrReadBuffer[1024] = {0}; 47 48 49 //test1.csv is GB2312 50 hFile = CreateFileA(("test1.csv"), GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 51 if (INVALID_HANDLE_VALUE!=hFile) 52 { 53 if (TRUE==ReadFile(hFile, arrReadBuffer, sizeof(arrReadBuffer)-1, NULL, NULL)) 54 { 55 printf("%s\n", arrReadBuffer); 56 std::string strReadBuffer(arrReadBuffer); 57 std::cout << strReadBuffer << std::endl; 58 59 ret = true; 60 } 61 } 62 else 63 { 64 ret = false; 65 } 66 CloseHandle(hFile); 67 return ret; 68 } 69 bool test__OperatorFile3() 70 { 71 bool ret = false; 72 HANDLE hFile = NULL; 73 //wchar_t arrReadBuffer[1024] = {0}; 74 75 76 //test00.csv is UTF-16 77 hFile = CreateFileW(TEXT("test00.csv"), GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 78 if (INVALID_HANDLE_VALUE!=hFile) 79 { 80 if (TRUE==WriteFile(hFile, arrwReadBuffer, sizeof(arrwReadBuffer), NULL, NULL)) 81 { 82 83 ret = true; 84 } 85 } 86 else 87 { 88 ret = false; 89 } 90 CloseHandle(hFile); 91 return ret; 92 } 93 bool test__OperatorFile4() 94 { 95 bool ret = false; 96 HANDLE hFile = NULL; 97 //wchar_t arrReadBuffer[1024] = {0}; 98 99 100 //test01.csv is GB2312101 hFile = CreateFileA(("test01.csv"), GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);102 if (INVALID_HANDLE_VALUE!=hFile)103 {104 if (TRUE==WriteFile(hFile, arrReadBuffer, sizeof(arrReadBuffer), NULL, NULL))105 {106 107 ret = true;108 }109 }110 else111 {112 ret = false;113 }114 CloseHandle(hFile);115 return ret;116 }117 bool test__OperatorFile5()118 {119 bool ret = false;120 HANDLE hFile = NULL;121 //char arrReadBuffer[1024] = {0};122 123 124 //test2.csv is UTF-8125 hFile = CreateFileA(("test2.csv"), GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);126 if (INVALID_HANDLE_VALUE!=hFile)127 {128 if (TRUE==ReadFile(hFile, arrReadBuffer_UTF8, sizeof(arrReadBuffer_UTF8)-1, NULL, NULL))129 {130 printf("%s\n", arrReadBuffer_UTF8);131 std::string strReadBuffer(arrReadBuffer_UTF8);132 std::cout << strReadBuffer << std::endl;133 134 ret = true;135 }136 }137 else138 {139 ret = false;140 }141 CloseHandle(hFile);142 return ret;143 }144 bool test__OperatorFile6()145 {146 bool ret = false;147 HANDLE hFile = NULL;148 //wchar_t arrReadBuffer[1024] = {0};149 150 151 //test02.csv is UTF-8152 hFile = CreateFileA(("test02.csv"), GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);153 if (INVALID_HANDLE_VALUE!=hFile)154 {155 if (TRUE==WriteFile(hFile, arrReadBuffer_UTF8, sizeof(arrReadBuffer_UTF8), NULL, NULL))156 {157 158 ret = true;159 }160 }161 else162 {163 ret = false;164 }165 CloseHandle(hFile);166 return ret;167 }168 169 CHAR *lpReadBuffer_UTF8 = NULL;170 DWORD cbReadBuffer_UTF8 = 0;171 WCHAR *lpReadBuffer_UTF16 = NULL;172 INT cchReadBuffer_UTF16 = 0;173 std::wstring wstrReadBuffer;174 bool test__OperatorFile7()175 {176 bool ret = false;177 HANDLE hFile = NULL;178 //char arrReadBuffer[1024] = {0};179 180 181 //test2.csv is UTF-8182 hFile = CreateFileA(("test2.csv"), GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);183 if (INVALID_HANDLE_VALUE!=hFile)184 {185 cbReadBuffer_UTF8 = SetFilePointer(hFile, 0, NULL, FILE_END);186 if (sizeof(CHAR)!=sizeof(BYTE))187 {188 return ret;189 }190 lpReadBuffer_UTF8 = (CHAR *)malloc( cbReadBuffer_UTF8 );191 ZeroMemory(lpReadBuffer_UTF8, cbReadBuffer_UTF8);192 SetFilePointer(hFile, 0, NULL, FILE_BEGIN);193 194 if (NULL!=lpReadBuffer_UTF8 && TRUE==ReadFile(hFile, lpReadBuffer_UTF8, cbReadBuffer_UTF8-1, NULL, NULL))195 {196 lpReadBuffer_UTF16 = (WCHAR *)malloc( cbReadBuffer_UTF8*sizeof(WCHAR) );197 ZeroMemory(lpReadBuffer_UTF16, cbReadBuffer_UTF8*sizeof(WCHAR));198 cchReadBuffer_UTF16 = cbReadBuffer_UTF8;199 if ( 0!=MultiByteToWideChar(CP_UTF8, 0, lpReadBuffer_UTF8, cbReadBuffer_UTF8, lpReadBuffer_UTF16, cchReadBuffer_UTF16) )200 {201 wstrReadBuffer = lpReadBuffer_UTF16;202 std::wcout << wstrReadBuffer << std::endl;203 204 WCHAR *lpReadBuffer_UTF16_2 = (WCHAR *)malloc( cbReadBuffer_UTF8*sizeof(WCHAR) );205 ZeroMemory(lpReadBuffer_UTF16_2, cbReadBuffer_UTF8*sizeof(WCHAR));206 CopyMemory(lpReadBuffer_UTF16_2, wstrReadBuffer.c_str(), (wstrReadBuffer.length()+1)*sizeof(WCHAR));207 if (lpReadBuffer_UTF16_2)208 free(lpReadBuffer_UTF16_2);209 210 WCHAR *lpReadBuffer_UTF16_3 = (WCHAR *)malloc( cbReadBuffer_UTF8*sizeof(WCHAR) );211 ZeroMemory(lpReadBuffer_UTF16_3, cbReadBuffer_UTF8*sizeof(WCHAR));212 lstrcpyn(lpReadBuffer_UTF16_3, wstrReadBuffer.c_str(), (wstrReadBuffer.length()+1));213 if (lpReadBuffer_UTF16_3)214 free(lpReadBuffer_UTF16_3);215 216 ret = true;217 218 }219 220 221 222 if (lpReadBuffer_UTF16)223 free(lpReadBuffer_UTF16);224 }225 226 if (lpReadBuffer_UTF8)227 free(lpReadBuffer_UTF8);228 229 230 }231 else232 {233 ret = false;234 }235 CloseHandle(hFile);236 return ret;237 }238 239 WCHAR *lpWriteBuffer_UTF16 = NULL;240 INT cchWriteBuffer_UTF16 = 0;241 CHAR *lpWriteBuffer_UTF8 = NULL;242 INT cbWriteBuffer_UTF8 = 0;243 bool test__OperatorFile8()244 {245 bool ret = false;246 HANDLE hFile = NULL;247 //wchar_t arrReadBuffer[1024] = {0};248 249 250 //test02.csv is UTF-8251 hFile = CreateFileA(("test03.csv"), GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);252 if (INVALID_HANDLE_VALUE!=hFile)253 {254 cchWriteBuffer_UTF16 = wstrReadBuffer.length()+1;255 lpWriteBuffer_UTF16 = (WCHAR *)malloc( cchWriteBuffer_UTF16*sizeof(WCHAR) );256 ZeroMemory(lpWriteBuffer_UTF16, cchWriteBuffer_UTF16*sizeof(WCHAR));257 CopyMemory(lpWriteBuffer_UTF16, wstrReadBuffer.c_str(), cchWriteBuffer_UTF16*sizeof(WCHAR));258 259 if (sizeof(CHAR)!=sizeof(BYTE))260 { 261 return ret;262 }263 cbWriteBuffer_UTF8 = cchWriteBuffer_UTF16*sizeof(WCHAR);264 lpWriteBuffer_UTF8 = (CHAR *)malloc(cbWriteBuffer_UTF8);265 ZeroMemory(lpWriteBuffer_UTF8, cbWriteBuffer_UTF8);266 267 if (0!=WideCharToMultiByte(CP_UTF8, 0, lpWriteBuffer_UTF16, cchWriteBuffer_UTF16, lpWriteBuffer_UTF8, cbWriteBuffer_UTF8, NULL, NULL))268 {269 SetFilePointer(hFile, 0, NULL, FILE_BEGIN);270 if (TRUE==WriteFile(hFile, lpWriteBuffer_UTF8, cbWriteBuffer_UTF8, NULL, NULL))271 {272 273 ret = true;274 }275 276 }277 278 if (lpWriteBuffer_UTF8)279 free(lpWriteBuffer_UTF8);280 281 if (lpWriteBuffer_UTF16)282 free(lpWriteBuffer_UTF16);283 }284 else285 {286 ret = false;287 }288 CloseHandle(hFile);289 return ret;290 }291 292 293 int _tmain(int argc, _TCHAR* argv[])294 {295 //std::cout << std::boolalpha << test__OperatorFile() << std::endl;296 //std::cout << std::boolalpha << test__OperatorFile2() << std::endl;297 //std::cout << std::boolalpha << test__OperatorFile3() << std::endl;298 //std::cout << std::boolalpha << test__OperatorFile4() << std::endl;299 //std::cout << std::boolalpha << test__OperatorFile5() << std::endl;300 //std::cout << std::boolalpha << test__OperatorFile6() << std::endl;301 std::cout << std::boolalpha << test__OperatorFile7() << std::endl;302 std::cout << std::boolalpha << test__OperatorFile8() << std::endl;303 304 return 0;305 }
*注:编译环境VS2012。
具体源码我已打包上传:http://files.cnblogs.com/superstargg/TEST__WINDOWSFILES.zip
window FILES——windows文件管理相关实例
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。