C语言_文件篇(文件的打开,读取,写入,定位,关闭)

文件类型指针

FILE *指针变量名//例如:FILE *fp;

文件指针不同于文件位置,文件指针指向文件位置,在使用前必须在程序中定义即使文件指针指向某个文件。

文件的打开(fopen函数)

fopen(文件名,文件的使用方式)//打开成功返回指向该文件的FILE类型的文件指针,打开失败返回NULL

文件的使用方式(以文本为例,二进制文件在字母后面加b就好):

方式含义
r以只读方式打开文件,该文件必须存在否则打开失败
r+以读写方式打开文件,该文件必须存在否则打开失败
w打开只写文件,若文件存在则文件长度清为0(即该文件内容会消失)若文件不存在则建立该文件
w+打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件
a以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留(EOF符保留)
a+以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留(原来的EOF符不保留)

文件的读取

fgetc();

作用:能够从文件中读取一个字符,并且把光标(文件指针)移动到下一个字符,文本结束有EOF(宏定义标记读到末尾)。
读取文件内容程序事例(文本文件):

char ch;
while((ch = fgetc(fp)) != EOF)//while(EOF != (ch = fgetc(fp)))
{
	printf("%c",ch);
}

读取二进制文件时不能使用上述方法(二进制文件结尾没有EOF标识符),应使用feop(fp);(文件结束返还值为非零,否则为0)
程序写法:

char ch;
while(!feof(fp))
{
	ch=fgetc(fp);
	printf("%c",c);
}

fgets();

fgets(char *s, int size, FILE *stream);
参数含义
第一个参数是读取的数据存放的内存的指针(数组)
第二个参数存放读取内容的大小
第三个参数是要读取的文件的指针
返回值函数的第一个参数

作用:与fgetc大致相同,不同的是fgets可以一次性读取一行
程序:

char str[200];//长度可以自己规定
while(fgets(str,200,fp))//函数第一个参数为存放读取内容的地址,第二个参数为自己定义的数组长度
{
	printf("%s\n",str);
}//读取整个文件的方法与fgetc相同

fread();

  fread(   void   *buffer,   size_t   size,   size_t   count,   FILE   *stream   ) 
参数含义
第一个参数是读取的数据存放的内存的指针(数组)
第二个参数每次读取的字节数
第三个参数读取的次数
第四个参数要读取的文件的指针
返回值实际读取的大小

作用:相比于前两个函数这个函数的强大之处在于可以随意的读取文件的内容的。

程序:

char str[200]={0};
while(fread(str,1,100,fp)
{
	printf("%s",str);
}

文件的写入

fputc()

fputc(int char, FILE *stream)
参数含义
第一个参数这是要被写入的字符。该字符以其对应的 int 值进行传递
第一个参数要读取的文件的指针
返回值如果没有发生错误,则返回被写入的字符。如果发生错误,则返回 EOF,并设置错误标识符
程序:
fputc('A',fp);

fputs()

 fputs(const char *str, FILE *stream)
参数含义
第一个参数这是指向要被写入的元素数组的指针。
第二个参数要读取的文件的指针
返回值该函数返回一个非负值,如果发生错误则返回 EOF。
程序:
char *str="ABCDEFG";//如果想换行,换行符需要自己添加。
fputs(str,fp);

fwrite()

fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
参数含义
第一个参数指向要被写入的元素数组的指针。
第二个参数要被写入的每个元素的大小,以字节为单位。
第三个参数元素的个数,每个元素的大小为 size 字节。
第四个参数要写入的文件的指针
返回值返回实际写入的数据块数目

程序:

char *str="ABCDEF"
fwrite(str,1,strlen(str),fp)
//fwite 可以写入任何类型
int num=123456;
fwrite(&num,sizeof(num),1,fp)

文件指针定位

rewind()

rewind(fp);

函数功能:将文件的读/写指针移动到文件开头

fseek()

fseek(FILE *stream, long offset, int fromwhere);
参数含义
第一个参数要操作的文件指正
第二个参数偏移量,整数表示正向偏移,负数表示负向偏移
第三个参数设定从文件的哪里开始偏移,可能取值为:SEEK_CUR(0,文件开头)、 SEEK_END(1,当前文件) 或 SEEK_SET(2,文件结尾)
返回值返回实际写入的数据块数目

程序:

fseek(fp,100L,0);//把fp指针移动到离文件开头100字节处;
fseek(fp,100L,1);//把fp指针移动到离文件当前位置100字节处;
ffseek(fp,-100L,2)//把fp指针退回到离文件结尾100字节处。

文件关闭

fclose()

fclose(fp)

正常关闭返回0,否则返回EOF。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值