• 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
    ", 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
    ", 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 GB2312
    101     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     else
    111     {
    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-8
    125     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
    ", arrReadBuffer_UTF8);
    131             std::string strReadBuffer(arrReadBuffer_UTF8);
    132             std::cout << strReadBuffer << std::endl;
    133 
    134             ret = true;
    135         }
    136     }
    137     else
    138     {
    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-8
    152     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     else
    162     {
    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-8
    182     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     else
    232     {
    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-8
    251     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     else
    285     {
    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

  • 相关阅读:
    转载: RAID详解[RAID0/RAID1/RAID10/RAID5]
    用户交互式命令:read
    linux下fdisk分区管理、文件系统管理、挂载文件系统等
    linux文件系统下的特殊权限
    find命令详解
    python3中 getpass模块使用
    个人shell积累
    手把手教你利用爬虫爬网页(Python代码)
    数通HCIP-ospf知识点
    HCIE之路--超全ospf思维导图
  • 原文地址:https://www.cnblogs.com/superstargg/p/4090946.html
Copyright © 2020-2023  润新知