文件操作攻略

目录

文件

三要素:

文件路径:

文件名:

后缀:

 文件的打开与关闭

文件的顺序读写

字符输入输出

fgetc

fputc

rewind

 字符串输入输出

fgets

fputs

格式化输入输出

fscanf

fprintf

二进制方式读写数据块

fread

fwrite

feof


文件

(操作系统管理数据的基本单位)

三要素:

文件路径、文件名、后缀。

文件路径:

由于在 C 语言中 '\' 一般是转义字符的起始标志,故在路径中需要用两个 '\' 表示路径中目录层次的间隔。(也可以使用 '/' 作为路径中的分隔符。)

(例如,"E:\\ch10.doc"或者"E:/ch10.doc",表示文件 ch10.doc 保存在 E 盘根目录下。"f1.txt" 表示当前目录下的文件 f1.txt。)

文件名:

标识文件名字的合法标识符,如 ch10、file_1 等都是合法的文件名。

后缀:

一般用于标明文件的类型,使用方式为:文件名.后缀。常见的后缀类型有:doc、txt、dat、c、cpp、obj、exe、bmp、jpg 等。

常见的15个文件拓展名如下:

一、.txt:文本格式,文本文件的拓展名。

二、.pdf:便携式文档格式,电子文件格式,是以语言图像为基本,它不能像word一样随意编辑。

三、.doc或者.docx:文档格式,word文档后缀。

四、.jpg:图片格式。体积比png小。但是图片属于有损压缩。多次编辑和保存,图片就模糊了。

五、.gif:动图图像格式。

六、.png:图片格式,图片属于无损压缩。

七、.mp4:视频文件格式。

八、.mov:苹果开发的高清视频格式。

九、.mp3:音频格式。

十、.rar:压缩文件格式。

十一、.zip:压缩文件格式。

十二、.exe:可执行程序。一般软件的安装包就是这个拓展名。

十三、.bak:备份文件。

十四、.ppt:演示文稿

十五、.htm或者html :超文本文档

 文件的打开与关闭

(“打开”和“关闭”可调用标准库 stdio.h 中的 fopen 和 fclose 函数实现。)

函数 fopen 的原型如下

FILE * fopen(char *filename, char *mode);

参数:

1、filename:文件名,包括路径。例如:“D:\\f1.txt”

2、mode:文件打开模式,指出对该文件可进行的操作。

                                                        打开方式

关闭函数 fclose 的原型如下。

int fclose(FILE *fp);

例如: 

FILE *fpl,*fp2; //定义两个文件指针变量fpl和fp2
fpl=fopen(”D:\\fl.txt”,”r”); //以只读模式打开文件 fl.txt
if (NULL==fpl) //以返回值fpl判断是否打开成功,如果为NULL表示失败
{
    printf ("Failed to open the file !\n");
    exit (0) ; //终止程序,stdlib .h头文件中
}
fp2=fopen ("f2.txt","a") ; //以追加写入的模式打开文件f2 .txt
if(NULL==fp2)
{
    printf ("Failed to open the file !\n");
    exit (0);
}
fclose (fpl); //关闭fpl指针对应文件(fl.txt)
fclose (fp2); //关闭fp2指针对应文件(f2.txt)

文件的顺序读写

字符输入输出

fgetc

1、字符输入函数 fgetc 的函数原型为:

int fgetc (FILE *fp);// 返回类型应为 int 型,而非 char 型。

也可以使用 fgetc (stdin) 实现。其中,stdin 指向标准输入设备—键盘所对应的文件。stdin 不需要人工调用函数 fopen 打开和 fclose 关闭。

所在头文件:<stdio.h>。

函数功能:从文件指针 fp 所指向的文件中输入一个字符。

fputc

2.字符输出函数 fputc 的函数原型为:

int fputc (int c, FILE *fp);// 返回类型应为 int 型,而非 char 型。

也可以使用 fputc (ch,stdout); 实现。其中,stdout 指向标准输出设备—显示器所对应的文件。stdout 也不需要人工调用函数 fopen 打开和 fclose 关闭。

所在头文件:<stdio.h>

函数功能:向 fp 指针所指向的文件中输出字符 c。

rewind

3、文件读写位置复位函数 rewind 的函数原型为:

(对一个文件进行读写操作时,经常会把一个文件中读写位置重新调整到文件的开始处,可以使用函数 rewind 实现。)

void rewind (FILE *fp);

所在头文件:<stdio.h>

函数功能:把 fp 所指向文件中的读写位置重新调整到文件开始处

 字符串输入输出

fgets

1、字符串输入函数 fgets 的函数原型为:

char * fgets (char *s, int size, FILE * fp);

所在头文件:<stdio.h>

函数功能:从 fp 所指向的文件内,读取若干字符(一行字符串),并在其后自动添加字符串结束标志 '\0' 后,存入 s 所指的缓冲内存空间中(s 可为字符数组名),直到遇到回车换行符或已读取 size-1 个字符或已读到文件结尾为止。该函数读取的字符串最大长度为 size-1。

fputs

2、字符串输出函数 fputs 的函数原型为:

int fputs (const char *str, FILE *fp);

所在头文件:<stdio.h>

函数功能:把 str(str 可为字符数组名)所指向的字符串,输出到 fp 所指的文件中。

格式化输入输出

fscanf

1、文件格式化输入函数 fscanf 的函数原型为:

int fscanf (文件指针,格式控制串,输入地址表列);

所在头文件:<stdio.h>

函数功能:从一个文件流中执行格式化输入,当遇到空格或者换行时结束。注意该函数遇到空格时也结束,这是其与 fgets 的区别,fgets 遇到空格不结束。

fprintf

2、文件格式化输出函数 fprintf 的函数原型为:

int fprintf (文件指针,格式控制串,输出表列);

所在头文件:<stdio.h>

函数功能:把输出表列中的数据按照指定的格式输出到文件中。

例如: 

#include<stdio.h>
#include<stdlib.h>
int main (void)
{
    FILE *fp=fopen("C:\\Users\\86133\\Desktop\\time.txt","w");
    char name[ 10] ="张三";
    char no[15]="20170304007";
    int age=17;
    if(NULL==fp)
    {
        printf ("Failed to open the file !\n");
        exit (0);
    }
    fprintf(fp,"%s\t%s\t%d\n",name,no,age);
    fclose(fp);
    return 0;

 运行程序后,当前目录下生成了time.txt 文件,并且其内容为:
张三  20170304007  17

但是我觉得这个不是很好用,可以直接用fread,定义一个结构体,然后输入内容,具体操作可以看下面

二进制方式读写数据块

fread

1、数据块读取(输入)函数 fread 的函数原型为:

unsigned fread (void *buf, unsigned size, unsigned count, FILE* fp);

所在头文件:<stdio.h>

函数功能:从 fp 指向的文件中读取 count 个数据块,每个数据块的大小为 size。把读取到的数据块存放到 buf 指针指向的内存空间中。

参数:

  • buf:指向存放数据块的内存空间,该内存可以是数组空间,也可以是动态分配的内存。void类型指针,故可存放各种类型的数据,包括基本类型及自定义类型等。
  • size:每个数据块所占的字节数。
  • count:预读取的数据块最大个数。
  • fp:文件指针,指向所读取的文件。

fwrite

2、数据块写入(输出)函数 fwrite 的函数原型为:

unsigned fwrite (const void *bufAunsigned size,unsigned count,FILE* fp);

所在头文件:<stdio.h>

函数功能:将 buf 所指向内存中的 count 个数据块写入 fp 指向的文件中。每个数据块的大小为 size。

在操作文件时,经常使用 feof 函数来判断是否到达文件结尾。

feof


3、feof 函数的函数原型为:

int feof (FILE * fp);

所在头文件:<stdio.h>

函数功能:检查 fp 所关联文件流中的结束标志是否被置位,如果该文件的结束标志已被置位,返回非 0 值;否则,返回 0。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值