1.文件有二进制模式和字符模式。(不同系统有对换行符的修正 “ ”会被替换为 “ ”,“ ”换为 等等 这个很乱 ,二进制没有这种情况)
1 #include <stdio.h> 2 #include <stdlib.h>//提供 exit()的原型 3 int main(int argc,char *argv[]) 4 { 5 int ch;//读取文件,储存每个字符的地方 6 FILE *fp;//文件指针 7 unsigned long count = 0; 8 if(argc!=2) 9 { 10 printf(); 11 } 12 }//argc 代表命令行 argv[0]程序的名称 argv[1]输入文件名字,要打开文件的名字
2.fopen()
模式字符串 | 含义 |
“r” | 以读的模式打开 |
“w” | 以写的模式打开,把现有文件清空,不存在的话,新创建一个 |
“a” | 在现有文件末端添加,不存在新建一个 |
“r+” | 更新模式打开(可以读写) |
“w+” | 更新模式 清空原有数据 |
“a+” | 更新模式 文件末尾添加 ,可以全读 |
“rb”/“wb”/“ab”/“rb+” …. | 二进制模式操作 |
“wx”/”wbx”/”w+x”/”wb+x”或者“w+bx” | (c11)文件独占模式 |
FLIE * fp;
fp = fopen(“wacky.txt”,”r”);
ch=getc(fp);//获取单文件字节
while(ch!=EOF)//文件结束符
3.fclose()//函数 正常关闭 会返回0
4.
fgets(buf,STLEN,fp) //读到第一个换行符 或文件结尾或 STLEN-1个字符,末尾添加一个‘ ’,结束符返回null
fput(buf,fp);//写入待写入文件,不会添加换行符
5.随机访问
fseek(fp,0L,SEEK_END); //用于定位文件位置 第一个参数 FILE指针,第二个参数偏移量 offset,第三个用于确定从哪里开始
ftell() 返回long,当前位置距离开始的距离
1 fseek(fp,0L,SEEK_SET);//定位至文件开始处 2 fseek(fp,10L,SEEK_SET);//定位至文件开始处的第10个字节 3 fseek(fp,2L,SEEK_CUR);//当前位置 前进两个字节 4 fseek(fp,0L,SEEK_END);//定位置文件结尾 5 fseek(fp,-10L,SEEK_END);//定位置文件结尾回退10字节
模式 | 偏移量的起始点 |
SEEK_SET | 文件开始处 |
SEEK_CUR | 当前位置 |
SEEK_END | 文件末尾 |
注意:兼容性 不同系统很难做到兼容
以上两个函数都是long参数,fgetpos 和 fsetpos() 他们使用了新类型 fpos_t
int fgetpos(FILE * restrict stream,fpos_t * restrict pos)//pos描述 当前位置距离开始的位置
int fsetpos(FILE * stream,const fpos_t *pos);