首先读取一个二进制文件,然后将内容分批写入一个动态数组,再将这个动态数组的内容写入一个文件,照理说,这个新文件跟原来的文件内容应该是一样的,但写入后却是不一样的。例如说,这个二进制文件是个图形文件,进行上面的操作后,新文件就认不出是图形文件了。但如果文件不是分批读入的,而是一次性读入的,就不会有这些问题,一切都正常。
为什么?谢谢!!
代码如下:
long total=0, count;
FILE *src,*dest;
src = fopen("src.bmp", "rb");
dest = fopen("dest.bmp", "w+b");
char *all = new char[];
char exchangeStr[100]; while(!feof(src))
{
count = fread(exchangeStr, sizeof(char), 100, src);
total += count;
strcat(all, exchangeStr);
}
all[total] = '\0'; fwrite(all, sizeof(char), total, dest);
为什么?谢谢!!
代码如下:
long total=0, count;
FILE *src,*dest;
src = fopen("src.bmp", "rb");
dest = fopen("dest.bmp", "w+b");
char *all = new char[];
char exchangeStr[100]; while(!feof(src))
{
count = fread(exchangeStr, sizeof(char), 100, src);
total += count;
strcat(all, exchangeStr);
}
all[total] = '\0'; fwrite(all, sizeof(char), total, dest);
解决方案 »
- 窗口永远绘制在最顶上,就算有DX全屏
- MFC ado 数据库(MSSQL)
- 急 求 VC++ 6.0 MSDN
- 想做一个资源管理器,如何把一个目录下的文件枚举并放入listctrl,并显示小图标用report样式
- 为什么用VC6编译GDI+程序总是不能够通过?我已经下载并配置了GDI+的库文件!!!
- 如何在自己的程序中调用“记事本”(NotePad.exe)打开特定的文件?
- ADO的简单问题
- com内自动触发事件,并且传递参数到调用com的程序,现在想传递一个结构体出去,请问高手如何传递。
- Windows中是否有subclass的概念?
- 将于明天更换msdn03,:)
- 奇怪?
- 寻VC比较厉害的人物,交个朋友,互相切磋。
你的代码有两个地方值得推敲:
1、char *all = new char[]; // 中括号里少点东西吧?
2、strcat(all, exchangeStr); // 我想主要问题出在这一句,这是一个字符串连接函数,不能用来处理二进制字节数据,因为字符串是以空字符结尾的。如果遇到一个含'\0'的二进制数据流,那么结果将必然不是你所期望的。
2、同意楼上的意见,
如果要分批写入,建议使用CFile对象,最好不要使用传统的C方法。
CFile.Open("文件名",modeReadWrite|typeBinary);
CFile.Write( 存储区起始地址指针, 存储区长度 );
char src[10] = "123456";
char dest[5] = "abcd";
实际上,src长度是7,最后一个是'\0',
如果进行strcat(src,dest),src的实际长度是11,最后是'\0'.应该是这样吧?我现在用memcpy已经解决这个问题了。现在的问题是,char *all = new char[]; 定义的动态数组最大好像是4096,我需要的是不限大小的动态数组呀。