QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1179|回复: 6

关于文件按行拷贝,不同文件竟然结果不同

[复制链接]
发表于 2005-11-19 22:14:58 | 显示全部楼层 |阅读模式
我想利用fgets和fputs实现文件的按行拷贝。源代码如下:
#include <stdio.h>
#define MAX_LINE 1024
int main()
{
   FILE *in,*out;
   char buf[MAX_LINE];
   in=fopen("copy_sample.pdf","r");
   out=fopen("copy_io_line.pdf","w");
   while(fgets(buf,MAX_LINE,in)!=NULL)
       fputs(buf,out);
   exit(0);
}

可是我运行后,形成的新文件的大小比原文件小,里面内容缺失。
我又试着拷贝一个txt文件,运行后成功。
怎么不同文件拷贝结果会不一样呢?
问题出在哪里?谢谢答疑!
发表于 2005-11-20 23:24:05 | 显示全部楼层
fgets和fpus都是处理文本数据要用如下的方法打开文件

fopen(.., "rb");
fopen(.., "wb");

然后用fread和fwrite读写数据。
回复

使用道具 举报

 楼主| 发表于 2005-11-21 11:19:34 | 显示全部楼层
我也用过
fopen(.., "rb");
fopen(.., "wb");

可是结果一样。
fread和fwrite应该是按块拷贝吧。并不是逐行拷贝。不知道说的对不对。
因为我想把文件的逐字符拷贝,逐行拷贝,逐块拷贝都实现。
多谢答复!
回复

使用道具 举报

发表于 2005-11-21 12:02:42 | 显示全部楼层
二进制格式文件你还想逐行拷贝?二进制格式文件有行这个概念么?
回复

使用道具 举报

 楼主| 发表于 2005-11-21 19:04:54 | 显示全部楼层
原来pdf文件是二进制文件。

再想问:怎么判断一个文件是二进制文件还是文本文件?有现成的函数吗?
我使用file命令判断一个pdf文件的类型,结果只返回"pdf document,version ..."。
linux下是不是把所有的文件都当成二进制文件?

谢谢版主。
回复

使用道具 举报

发表于 2005-11-21 20:02:21 | 显示全部楼层
好像判断不了吧,除非把文件内容从头到尾读一遍,挨个字符判断一下。
file命令是根据文件头来判断文件类型的。
不是,文本文件还是文本文件。
回复

使用道具 举报

 楼主| 发表于 2005-11-24 20:41:29 | 显示全部楼层
多谢老大!
在这里收获很大!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-3 02:25 , Processed in 0.036651 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表