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 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\n", 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

你可能感兴趣的:(windows)