作者peefly (Peefly)
看板C_and_CPP
标题[问题] fread读档时file indicator不依序递增?
时间Sat Mar 21 04:12:32 2009
我写了一个简易复制档案的小程式,程式码如下
--
#include <stdio.h>
typedef char byte;
int main()
{
FILE *f,*tf;
byte t;
char path[30],newpath[50];
do{
printf("Filepath=");
scanf("%s",path);
f=fopen(path,"r"); //开档
if(f==NULL)printf("File not exist!\n");//判断开档是否成功
}while(f==NULL);
sprintf(newpath,"new-%s",path);//组合新档名
tf=fopen(newpath,"w");
while( 1 )
{
if( fread(&t,sizeof(byte),1,f) ==0 )break;//读档
printf("ftell=0x%x t=0x%x\n",ftell(f),t);
fwrite(&t,sizeof(byte),1,tf);//写档
}
fclose(f);
fclose(tf);
}
--
在处理小档案时都能顺利成功
但是只要档案稍大一点,如下面网址的图
http://www.dowwallpaper.com/wallpaper/placennature/forest/forest2.jpg
就会发生复制不完整的情况
甚至只有复制到前不到10个bytes
我用ftell查file indicator时,发现他有时并不是每次都会+1
甚至会乱跳,如上面那张图会从0x3e1e跳到0x4000
0x496f跳到0x4971之类的
所以无法读取到每个byte、复制完整
请问到底是什麽原因,会造成file indicator乱跳呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.118.234.64
1F:→ peefly:疑@@ 我把相同的程式码丢到Linux中执行竟然都能复制成功 03/21 04:23
2F:推 littleshan: Windows 要用 binary mode 开档 03/21 09:12
3F:→ peefly:哦 原来要特别加b .. 感谢楼上! 03/21 12:35