|
5驿站币
int 写到文件(CString 文件路径, CString 要写入的内容){
}
如果想封装一个这样的函数,该怎么写呢,我写出来的文件是乱码
- int 写到文件(CString 文件路径, CString 要写入的内容){
- HANDLE handle = CreateFile(
- 文件路径,
- GENERIC_WRITE | GENERIC_READ,
- FILE_SHARE_READ,
- NULL,
- CREATE_ALWAYS,
- FILE_ATTRIBUTE_NORMAL,
- NULL
- );
- if (handle != INVALID_HANDLE_VALUE){
- DWORD size;
- if (!WriteFile(handle, 要写入的内容, 要写入的内容.GetLength(), &size, NULL)){
- CloseHandle(handle);
- return GetLastError();
- }
- }
- CloseHandle(handle);
- }
复制代码
//工程编码如果是Unicode,乱码问题可能出在宽窄字节上
//方法一:写入unicode头字节(目标文件会被修改成Unicode编码,不需要手动修改)
- int 写到文件(CString 文件路径, CString 要写入的内容){
- HANDLE handle = CreateFile(
- 文件路径,
- GENERIC_WRITE | GENERIC_READ,
- FILE_SHARE_READ,
- NULL,
- CREATE_ALWAYS,
- FILE_ATTRIBUTE_NORMAL,
- NULL
- );
- if (handle != INVALID_HANDLE_VALUE){
- DWORD size;
- DWORD headbyte = 0xFEFF; //增加部分代码-定义Unicode头字节
- WriteFile(handle, &headbyte, sizeof(headbyte), &size, NULL); //增加部分代码-写入Unicode头字节
- //if (!WriteFile(handle, 要写入的内容, 要写入的内容.GetLength(), &size, NULL)){ //注释原有部分代码
- if (!WriteFile(handle, 要写入的内容, 要写入的内容.GetLength()*sizeof(TCHAR), &size, NULL)){ //修改部分代码-nNumberOfBytesToWrite为字节数不是字符数
- CloseHandle(handle);
- return GetLastError();
- }
- }
- CloseHandle(handle);
- return 1; //增加部分代码-补齐函数返回类型
- }
复制代码
//方法二:CString转成窄字节写入文件(目标文件为Ansi编码不改变)
- int 写到文件(CString 文件路径, CString 要写入的内容)
- {
- HANDLE handle = CreateFile(
- 文件路径,
- GENERIC_WRITE | GENERIC_READ,
- FILE_SHARE_READ,
- NULL,
- CREATE_ALWAYS,
- FILE_ATTRIBUTE_NORMAL,
- NULL
- );
- if (handle != INVALID_HANDLE_VALUE){
- DWORD size;
- int len = WideCharToMultiByte(CP_ACP, 0, 要写入的内容, -1, NULL, 0, NULL, NULL); //增加部分代码-返回长度
- char *pAnsibuf = new char[len + 1]; //增加部分代码
- WideCharToMultiByte(CP_ACP, 0, 要写入的内容, -1, pAnsibuf, len, NULL, NULL); //增加部分代码-宽窄转换
- int lenAnsi = strlen(pAnsibuf); //增加部分代码
- //if (!WriteFile(handle, 要写入的内容, 要写入的内容.GetLength(), &size, NULL)){ //注释原有部分代码
- if (!WriteFile(handle, pAnsibuf, lenAnsi, &size, NULL)){ //修改部分代码
- CloseHandle(handle);
- delete[] pAnsibuf; //增加部分代码
- return GetLastError();
- }
- delete[] pAnsibuf; //增加部分代码
- }
- CloseHandle(handle);
- return 1; //增加部分代码-函数补齐返回类型
- }
复制代码
//方法三
//MFC编程建议使用CFile类,与CString相对契合,具体使用方法老沈在C/C++基础班教程中有讲,
//以上内容为个人经验分享,如有错误或不足,望指正  .
|
最佳答案
查看完整内容
//工程编码如果是Unicode,乱码问题可能出在宽窄字节上
//方法一:写入unicode头字节(目标文件会被修改成Unicode编码,不需要手动修改)
//方法二:CString转成窄字节写入文件(目标文件为Ansi编码不改变)
//方法三
//MFC编程建议使用CFile类,与CString相对契合,具体使用方法老沈在C/C++基础班教程中有讲,
//以上内容为个人经验分享,如有错误或不足,望指正.
上一篇: VS2013制作电子相册,按钮往左后退怎么处理下一篇: 赋值
|