唐伯虎 发表于 2021-7-29 21:50:20

C语言基础部分-文件操作

文件操作
基本说明
文件:
文件指存储在外部介质(如磁盘磁带)上数据的集合。 操作系统是以文件为单位对数据进行管理的。



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

int main(){
FILE *fp;
fp=fopen("./file.txt","r+");
if(NULL==fp){
perror("this is open problem");
goto end;
}
end:
system("pause");

}

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

int main(){
FILE *fp;
fp=fopen("./file","r+");
if(NULL==fp){
perror("this is open problem");
goto end;
}
end:
system("pause");

}

perror
语法:   
#include <stdio.h>
void perror( const char *str );
perror()函数打印str(字符串)和一个相应的执行定义的错误消息到全局变量errno中.

#ifndef _FILE_DEFINED
struct _iobuf {
      char *_ptr;//下一个要读取的字符的地址
      int   _cnt;//剩余字符
      char *_base;//缓冲区基地址
      int   _flag;//文件标识位
      int   _file;//文件描述符
      int   _charbuf;//
      int   _bufsiz;//缓冲区大小
      char *_tmpfname;
      };
typedef struct _iobuf FILE;
#define _FILE_DEFINED
#endif

“r” (只读)为输入打开一个文本文件“w” (只写)为输出打开一个文本文件“a” (追加)向文本文件尾增加数据“rb” (只读)为输入打开一个二进制文件“wb” (只写)为输出打开一个二进制文件"ab“ (追加)向二进制文件尾增加数据"r+“ (读写)为读/写打开一个文本文件"w+” (读写)为读/写建立一个新的文本文件"a+” (读写)为读/写打开一个文本文件"rb+“ (读写)为读/写打开一个二进制文件“wb+“ (读写)为读/写建立一个新的二进制文件“ab+” (读写)为读/写打开一个二进制文件

文件函数:
分类             函数名         功能                              
打开文件         fopen()          打开文件         
关闭文件         fclose()         关闭文件
文件定位         fseek()          改变文件位置指针的位置
                Rewind()   使文件位置指针重新至于文件开头
                Ftell()          返回文件位置指针的当前值
文件状态         feof()         若到文件末尾,函数值为真
                Ferror()      若对文件操作出错,函数值为真
                Clearerr()    使ferror和feof()函数值置零
文件读写         fgetc(),getc()从指定文件取得一个字符         
                fputc(),putc() 把字符输出到指定文件
                fgets()从指定文件读取字符串
                fputs()把字符串输出到指定文件
                fread()从指定文件中读取数据项
                fwrite()把数据项写到指定文件中
                fscanf()从指定文件按格式输入数据
                fprintf()按指定格式将数据写到指定文件中
fclose(文件指针);
函数功能: 使文件指针变量不指向该文件,也就是文件指针变量与文件“脱钩”,此后不能再通过该指针对原来与其相联系的文件进行读写操作。
返回值:关闭成功返回值为0;否则返回EOF(-1) 。
fputc函数
函数调用:fputc ( ch,fp ) ;
函数功能: 将字符(ch的值)输出到fp所指向的文件中去。
返回值:如果输出成功,则返回值就是输出的字符;如果输出失败,则返回一个EOF。
fgetc函数
函数调用:ch=fgetc(fp);
函数功能: 从指定的文件读入一个字符,该文件必须是以读或读写方式打开的。
返回值:读取成功一个字符,赋给ch。如果遇到文件结束符,返回一个文件结束标志EOF 。
#include<stdio.h>
#include<stdlib.h>

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



FILE *fp;

int i;
for(i=0;i<argc;i++){
puts(argv);
}

fp=fopen("./file","r+");
if(NULL==fp){
perror("this is open problem");
goto end;
}
end:
system("pause");

}

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

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



FILE *fp;

int i;
for(i=0;i<argc;i++){
printf("i=%d\n",i);

puts(argv);
}

fp=fopen("argv[]","r+");
if(NULL==fp){
perror("this is open problem");
goto end;
}
end:
system("pause");

}




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

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



FILE *fp;

//int i;
//for(i=0;i<argc;i++){
//printf("i=%d\n",i);
//puts(argv);
//}

fp=fopen(argv,"r+");
if(NULL==fp){
perror("this is open problem");
goto end;
}
end:
system("pause");

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

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



FILE *fp;

//int i;
//for(i=0;i<argc;i++){
//printf("i=%d\n",i);
//puts(argv);
//}
int ret;

fp=fopen(argv,"r+");
if(NULL==fp){
perror("this is open problem");
goto end;
}

ret=fputc('A',fp);
if(-1==ret){
perror("fputc problem is");
}
fclose(fp);//关闭文件
end:
system("pause");

}

注意


[*]关闭文件
[*]主动刷新
[*]缓冲区写满

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

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



FILE *fp;

//int i;
//for(i=0;i<argc;i++){
//printf("i=%d\n",i);
//puts(argv);
//}
int ret;
char c;

fp=fopen(argv,"r+");
if(NULL==fp){
perror("this is open problem");
goto end;
}

ret=fputc('A',fp);
if(-1==ret){
perror("fputc problem is");
}
ret=fputc('B',fp);
fclose(fp);//关闭文件

fp=fopen(argv,"r+");

while((c=fgetc(fp))!=EOF){
putchar(c);
}

end:
system("pause");

}


fwrite和fread
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc,char *argv[]){
FILE *fp;
char buf;
int ret;
fp=fopen(argv,"r+");
if(NULL==fp){
perror("this is open problem");
goto end;
}
strcpy(buf,"helloworld");
ret=fwrite(buf,sizeof(char),strlen(buf),fp);
fclose(fp);

end:
system("pause");

}

##文件使用方式
文件使用方式含 义      
“r”          (只读)为输入打开一个文本文件
“w”          (只写)为输出打开一个文本文件
“a”          (追加)向文本文件尾增加数据
“rb”         (只读)为输入打开一个二进制文件
“wb”         (只写)为输出打开一个二进制文件
"ab“         (追加)向二进制文件尾增加数据
"r+“         (读写)为读/写打开一个文本文件
"w+”         (读写)为读/写建立一个新的文本文件
"a+”         (读写)为读/写打开一个文本文件
"rb+“      (读写)为读/写打开一个二进制文件
“wb+“      (读写)为读/写建立一个新的二进制文件
“ab+”      (读写)为读/写打开一个二进制文件

区别
r+
写入\n .实际存储的是\r\n
读取时,\r\n会变成\n
rb+
写入\n.实际存储的是\n
读取时,\n读取出来的是\n
fseek函数(一般用于二进制文件)
函数功能:改变文件的位置指针。
函数调用形式:fseek(文件类型指针,位移量,起始点)起始点:
文件开头 SEEK_SET 0
文件当前位置 SEEK_CUR 1
文件末尾 SEEK_END 2
位移量:以起始点为基点,向前移动的字节数。一般要求为long型。
fseek函数应用举例

fseek(fp,100L,0);
将位置指针移到离文件头100个字节处。
fseek(fp,50L, 1);
将位置指针移到离当前位置50个字节处。
fseek(fp,50L, 2);
将位置指针从文件末尾处向后退10个字节。






文档来源:51CTO技术博客https://blog.51cto.com/hiszm/3199509
页: [1]
查看完整版本: C语言基础部分-文件操作