C语言文件操作实例
int a[] = {1,2,3,4,5,6,7,8,9,0};
FILE *fp = fopen("file.txt","wb");
if(!fp){
printf("file open error");
exit(-1);
}
fwrite(a,sizeof(a),1,fp);
fclose(fp);
二进制打开文件,是以写入变量的二进制码。如上面文件就是 写入数组的二进制形式000000000000000。。。。。
int a[] = {1,2,3,4,5,6,7,8,9,0};
FILE *fp = fopen("file.txt","wb");
if(!fp){
printf("file open error");
exit(-1);
}
fwrite(a,sizeof(a),1,fp);
int *b = new int[10];
memset(b,0,10*sizeof(int));
fread(b,sizeof(a),1,fp);
for(int i =0; i<10 ;++i){
printf("%d/t",b[i]);
}
printf("/n");
printf("%d/n",ferror(fp));
fclose(fp);
输出:
0 0 0 0 0 0 0 0 0 0
0
程序不能正确执行,是因为打开的模式不对。改正后既可。不过文件操作有一点得注意那就是文件指针的位置,这个很重要,上面的程序中仅仅改正打开模式是不正确的还要处理文件指针到头上。
int a[] = {1,2,3,4,5,6,7,8,9,0};
FILE *fp = fopen("file.txt","wb+");
if(!fp){
printf("file open error");
exit(-1);
}
fwrite(a,sizeof(a),1,fp);
int *b = new int[10];
memset(b,0,10*sizeof(int));
rewind(fp);
fread(b,sizeof(a),1,fp);
for(int i =0; i<10 ;++i){
printf("%d/t",b[i]);
}
printf("/n");
printf("%d/n",ferror(fp));
fclose(fp);
输出:
1 2 3 4 5 6 7 8 9 0
0
我们再以text的模式打开文件看看:
int a[] = {1,2,3,4,5,6,7,8,9,0};
FILE *fp = fopen("file.txt","wb+");
if(!fp){
printf("file open error");
exit(-1);
}
fwrite(a,sizeof(a),1,fp);
int *b = new int[10];
memset(b,0,10*sizeof(int));
fclose(fp);
fp = fopen("file.txt","rt");
fread(b,sizeof(a),1,fp);
for(int i =0; i<10 ;++i){
printf("%d/t",b[i]);
}
printf("/n");
printf("%d/n",ferror(fp));
fclose(fp);
输出:
1 2 3 4 5 6 7 8 9 0
0
说明以什么方式打开不重要,文件中内容的控制在于程序员本身。以文本方式打开文件的时候,我们着重点在于可见文件本省内容的保持,以二进制打开文件,着重于文件本身的内容的。
以gets() puts()等不适于用b方式打开。
seek的使用:
fseek用于文件位置指针的定位:
int a[] = {1,2,3,4,5,6,7,8,9,0};
FILE *fp = fopen("file.txt","wb+");
if(!fp){
printf("file open error");
exit(-1);
}
//fp = fopen("file.txt","ab");
//使用seek以实现文件的写入逆序
for(int i=0;i<10; ++i){
fseek(fp,0,SEEK_SET);
//rewind(fp);
fprintf(fp,"%d/t",a[i]);
}
fclose(fp);
是不是文件中应该有如下所示:
0,9,8,7,6,5,4,3,2,1
不会的!
因为文件不会支持插入操作!
另外fseek最好用于二进制文件中。