unicode文件复制问题
目的:Unicode文件复制,source -> target思路:从source不断读取内容到宽字符数组中,然后将数组内容写入到target。读采用fread,写采用wofstream
问题:运行后target文件为空
注解:本贴是为了研究wofstream的使用。文件复制使用fwrite写可完成(已验证)。因此,希望高手帮忙解答如何使用wofstream完成复制。
开发环境:Visual C++ 2005, Windows Xp system
源程序:
#include <stdio.h>
#include <fstream>
#ifdef UNICODE
typedef wchar_t TCHAR;
#else
typedef char TCHAR;
#endif
using namespace std;
const int MAX_LEN = 256;
const char source[] = "sysinfo.txt";
const char target[] = "copy.txt";
int main(int argc, char *argv[])
{
TCHAR buf[MAX_LEN] = {'\0'};
FILE *srcf;
if (fopen_s(&srcf, source, "r")) {
printf("Can not open source file!\n");
return 1;
}
locale loc("");
wofstream outf;
outf.open(target, std::ios_base::out);
outf.imbue(loc);
while (!feof(srcf)) {
fread(buf, sizeof(TCHAR), MAX_LEN, srcf);
outf << buf << endl;
}
fclose(srcf);
outf.close();
return 0;
}
--------------------编程问答-------------------- http://coding.derkeiler.com/Archive/C_CPP/alt.comp.lang.learn.c-cpp/2003-12/0344.html --------------------编程问答-------------------- 文件读到buf[]成功了未?把buf显示出来看看 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 读到buf是没有问题的,就是写不到文件中去 --------------------编程问答-------------------- oyljerry,你推荐的帖子看了,觉得codecvt主要就是做帮忙做本地化。需要指出的是:在我的代码中,如果手工给buf赋值,wofstream工作完全正常的,赋值给buf的uicode码会顺利的写入文件。可是当从文件中读取内容到buf时,却不能写入文件,然而检查buf的值表明,buf中确确实实有内容存在。令我很是困惑!我的代码很短,各位高手最好是亲自验证一下,可能会更清楚问题所在 --------------------编程问答-------------------- 今天碰好看到这篇文章,
http://bbs.chinaunix.net/archiver/?tid-807393.html
其中有一句
"我们的程序只适合拿来做两个 mbs 编码系统间的转换,不适合拿来做其中一个有 wcs 的转换,原因是程序中我们没有特别为 wcs 的情况使用 wchar_t * 数组,同时记得我们以前也提过,wcs 字符串是不能拿来做档案输出的,而我们的程序目前正是直接做档案编码转换的工作。"
还不明白为什么, 一起探讨.
补充:.NET技术 , VC.NET