文件指针定位函数
int fseek( FILE *stream, long offset, int origin );
如果成功返回0,失败返回非0
参数origin可以取值:
SEEK_CUR 当前位置
SEEK_END 文件未尾
SEEK_SET 文件起始外
文件打开函数
FILE *fopen( const char *filename, const char *mode );
参数mode
r-----为输入打开一个字符文件
w----为输出打开一个字符文件
a-----向字符文件尾增补数据
rb-----为输入打开一个二进制文件
wb----为输出打开一个二进制文件
ab-----向字符文件尾二进制数据
xx+---以读写方式打开文件
返回值
打开文件正确返回文件句柄,如果打开文件失败(读时--打开一个不存在的文件,写时--文件存在但磁盘空间已满)返回一个NULL指针(地址值为0)
打开文件方式必需注意
使用ASCII码文件,一个字节代表一个字符,便于对字符一一处理和输出,但占用较多的存储空间,并且要花费转换时间(ASCII码与二进制之间的转换)。使用二进制文件, 在内存中的数据形式与输出到外部文件中的数据形式完全一致,可以克服ASCII文件的缺点,但不直观,一个字节并不对应一个字符或一个数,不能直接输出字符形式。一般中间数据用二进制文件保存,输入输出使用ASCII文件。
//测试出文件长度函数
//必需以rb方式打开文件,可以正确读取文件大小
long fileLength(char *name)
{
FILE *pfile;
long fileLength;
int ret;
if((pfile = fopen(name,"rb")) == 0)
{
printf("文件读取错误!/n");
return 0;
}
ret=fseek(pfile,0L,SEEK_END);//指针指向文件未尾
if(ret)
{
printf("文件指针定位错误/n");
return 0;
}
fileLength=ftell(pfile);//告诉用户位置指针的当前指向
fclose(pfile);
return fileLength;
}
//用fread,fwrite实现文件拷贝
int copyFile(char *src,char *des)
{
FILE *psrcFile,*pdesFile;
int readSize=1;
long fileSize;
psrcFile = fopen("c://tapping.wav","rb");
pdesFile = fopen("c://def.wav","wb");
if((psrcFile&&pdesFile) == 0)
{
printf("文件打开出错");
return -1;
}
fileSize=fileLength("c://tapping.wav");
unsigned char temp[10];
while(!feof(psrcFile) && readSize != 0)
{
readSize=fread(temp,10,1,psrcFile);
if(readSize == 0)
{
fwrite(temp,fileSize,1,pdesFile);
fileSize=0;
}
else
{
fwrite(temp,10,1,pdesFile);
fileSize-=10;
}
}
fclose(psrcFile);
fclose(pdesFile);
return 0;
}
//实现文件读写记录数据