0
点赞
收藏
分享

微信扫一扫

C语言文件操作详解

一叶随风_c94d 2022-04-13 阅读 56
c语言

 

目录

1.什么是文件:

1.1程序文件

1.2数据文件

1.3文件名

2.为什么使用文件:

3.文件的打开和关闭

3.1文件指针

3.2文件的打开和关闭

 4.文件的顺序读写

4.1什么是流:

5.文件的随机读写 

5.1fseek

5.2ftell

 5.3rewind

1.1程序文件

包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境
后缀为.exe)。

1.2数据文件

文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,
或者输出内容的文件。

1.3文件名

一个文件要有一个唯一的文件标识,以便用户识别和引用。
文件名包含3部分:文件路径+文件名主干+文件后缀
例如: c:\code\test.txt
为了方便起见,文件标识常被称为文件名
 

这篇文章主要讨论数据文件

3.文件的打开和关闭

FILE* pf//文件指针变量

 定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区(是一个结构体变量)。通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量能够找到与它关联的文件。

3.2文件的打开和关闭

在文件的打开和关闭中我们需要用到两个库函数,fopen和fclose,因为在ANSIC 规定使用fopen函数来打开文件,fclose来关闭文件。当我们打开文件过后我们需要判断一下时候打开文件成功才能进行下一步操作,等操作完毕后关闭文件,在使用fopen的时候需注意的是我们需要两个参数,一个是文件名,一个是打开方式。打开方式图标和代码演示如下。

文件使用方式含义如果指定文件不存在
"r"(只读)为了输入数据,打开一个已经存在的文本文件 出错
"w"(只写)为了输出数据,打开一个文本文件建立一个新的文件
"a"(追加)向文本文件尾添加数据建立一个新的文件
"rb"(只读)为了输入数据,打开一个二进制文件出错
"wb"(只写)为了输出数据,打开一个二进制文件建立一个新文件
"ab"(追加)向一个二进制文件尾添加数据出错
"r+"(读写)为了读和写,打开一个文本文件出错
"w+"(读写)为了读和写,建立一个新的文件建立一个新的文件
"a+"(读写)打开一个文件,在文件尾进行读写建立一个新的文件
"rb+"(读写)为了读和写打开一个二进制文件出错
"wb+"(读写)为了读和写,新建一个新的二进制文件建立一个新的文件
"ab+"(读写)打开一个二进制文件,在文件尾进行读和写建立一个新的文件

#include<stdio.h>
int main()
{
    //打开文件
    FILE* pf = fopen("test.txt","w")//w代表write,表示写文件
    //判断文件是否打开
    if(pf == NULL)
    {
        perror("fopen");//打开失败返回错误信息
        return;
    }
    //写文件

    //关闭文件
    fclose(pf);
    pf=NULL;
    return 0;
}

 4.文件的顺序读写

在对文件进行一些顺序读写的时候我们需要用到一些功能函数如下:

功能函数名适用于
字符输入函数fgetc所有输入流
字符输出函数fputc所有输出流
文本行输入函数fgets所有输入流
文本行输出函数fputs所有输出流
格式化输入函数fscanf所有输入流
格式化输出函数fprintf所有输出流
二进制输入fread文件
二进制输出fwrite文件

这里用代码给大家演示一下输入与输出:

int main()
{
    //打开文件
	FILE* pf = fopen("test.txt", "w");//写
	if (pf == NULL)
	{
		perror("fopen");
		return;
	}
    //写如abcd
	fputc('a', pf);
	fputc('b', pf);
	fputc('c', pf);
	fputc('d', pf);
    //关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

 那么现在文件里已经有数据了(“abcde”),我们想把数据拿出来呢?我们就要用到输入。代码演示如下:

int main()
{
	FILE* pf = fopen("test.txt", "r");//读
	if (pf == NULL)
	{
		perror("fopen");
		return;
	}

	//拿出字符a
	int ch = fgetc(pf);
	printf("%c\n", ch);

	fclose(pf);
	pf = NULL;
	return 0;
}

 当我们读了字符'a'过后,偏移量从0变到1,这就叫顺序读写。

5.文件的随机读写 

5.1fseek

fseek是根据文件指针位置和偏移量来定位文件指针的函数

int fseek ( FILE * stream, long int offset, int origin );
// offset - 偏移量
// origin表示如下:
//1.SEEK_CUR - 文件指针当前的位置
//2.SEEK_END - 文件末尾的位置
//3.SEEK_SET - 文件开始的位置

我们采用上面的列子,在文件中输入了"abcd",我们想找到 'c' 该怎么做呢代码演示:

int main()
{
	//打开文件
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return;
	}

	//写文件
	fseek(pf, 2, SEEK_CUR);//c相对于文件当前位置的的偏移量为2
	int ch = fgetc(pf);
	printf("%c\n", ch);

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

5.2ftell

返回文件相对于起始位置的偏移量,返回的数据类型为long

long int ftell ( FILE * stream );

用法很简单,用上面的例子来给大家讲解,我们首先将使用fseek函数将偏移量改到2,随后用fgetc函数后,偏移量向后移,目前偏移量应该是3.

int main()
{
	//打开文件
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return;
	}

	//写文件
	fseek(pf, 2, SEEK_CUR);//c相对于文件当前位置的的偏移量为2
	int ch = fgetc(pf);
	printf("%c\n", ch);
    
    //重置偏移量
    long pos = ftell(pf);//3
    printf("%d\n",pos);

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

 5.3rewind

让文件指针的位置回到文件的起始位置

void rewind ( FILE * stream );
int main()
{
	//打开文件
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return;
	}

	//写文件
	fseek(pf, 2, SEEK_CUR);//c相对于文件当前位置的的偏移量为2
	int ch = fgetc(pf);
	printf("%c\n", ch);

	long pos = ftell(pf);
	printf("%d\n", pos);

    //重置偏移量
    rewind(pf);
    pos = ftell(pf);
	printf("%d\n", pos);
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}


 

 

举报

相关推荐

0 条评论