fwrite创建一个大于输入文件的输出文件

时间:2014-07-12 19:14:50

标签: c binaryfiles fwrite

我想以字节方式将文件读入数组,然后将数据的数据写入反向 在一个新文件中(程序采用文件名超过命令行参数)。用txt文件试了一下 它工作,但如果我在jpg文件上尝试它,新文件比原来大! 以长尺寸保存的确定文件大小对于jpg文件和写循环也是正确的 获取写入一个char的大小时间(char是一个字节大,我是对的?)。 有人知道输出文件如何变得比size * byte大吗?

这对我来说似乎不合逻辑!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc,char* argv[])
{

 FILE *file;
 char *buffer;
 long size;
 char filename[32];

 if(argc>1)
 {
  //determine file size
  file=fopen(argv[1],"r");
  fseek(file,0,SEEK_END);
  size=ftell(file);
  rewind(file);
  if(size>33554432) //32MB
  {
   fclose(file);
   return 0;
  }

  //create buffer and read file content
  buffer=malloc(33554432);
  fread(buffer,1,size,file);
  fclose(file);

  //create new file name and write new file
  strcpy(filename,argv[1]);
  strcat(filename,"_");
  file=fopen(filename,"w");
  {
   long i;
   for(i=size-1;i>=0;i--)
   {
    fputc(buffer[i],file);
   }
  }
  fclose(file);
  free(buffer);

 }
 return 0;
}

1 个答案:

答案 0 :(得分:4)

您收到的评论意味着:与其他系统相比,换行符\n在Windows上的文本模式下的工作方式不同。

如果在文本模式“w”中打开fputc('\n', file),则Windows上的

file实际上会写入两个字节,就像您执行了fwrite("\r\n", 1, 2, file)一样。这意味着对于\n读取的任何fread字节,您将写回两个字节。

如果要重写二进制数据,则需要使用"wb"模式打开输出文件到fopen()。您还需要将其打开以便以二进制模式"rb"进行阅读。