【快速学】C语言-文件操作

 

相关函数位于<stdio.h>中

1-缓冲区/流

文件和程序之间有输入/输出缓冲区,缓冲区是一个内存空间

2-文件位置指针

读数据从文件位置指针开始读,写数据从文件指针位置开始覆写

3-打开文件-fopen()

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

返回一个FILE指针,可将此指针存入一个变量,之后通过该指针操作此时打开的文件

mode表示打开文件的模式,常用mode:(还有很多)

mode 含义
"r" 读取一个文本文件,不写
"r+" 以读/写方式打开文件,该文件必须存在。
"w" 创建一个用于写入的文本文件,若文件存在则会清空文件
"w+" 打开可读/写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则创建该文件。

4-关闭文件-fclose()

int fclose( FILE *fp );

当作“关闭文件”使用。关闭文件流,成功则返回0,否则返回EOF。

5-写字符-fputc()

int fputc (int c, File *fp)

将字符c输出到文件fp中。英文字符一般是ASCII码,用整数表示,也可当作整数计算。中文字符是多字节字符,这种函数一般不能直接用,要做点其他事才行。

写成功,返回输出的字符,否则返回EOF

6-读字符-fgetc()

int fgetc(FILE *stream);

从文件stream读取一个字符。

读成功,返回读的字符,否则返回EOF。

7-读文件-fread()

size_t fread( void *buffer, size_t size, size_t count, FILE *stream );

buffer:读入数据的存放地址,一般用一个数组存储

size:一次读的字节数

count:要读几次。总读取的字节数为size*count

stream:文件指针

8-写文件-fwrite()

size_t fwrite(const void *buffer, size_t size, size_t count, FILE *stream);

fwrite()参数与fread()参数含义相同

9-改变文件的位置指针-fseek()

int fseek(FILE *stream, long offset, int fromwhere);

fseek()执行成功时返回0,否则返回非0值,并设置error的值,可以用perror()函数输出错误。

stream:文件指针

offset:位移量

origin:位移起点

  • 文件开头:  SEEK_SET  0
  • 文件当前位置:SEEK_CUR  1
  • 文件末尾:  SEEK_END  2

10-返回文件位置指针的位置-ftell()

long ftell(FILE *stream);

返回文件位置指针当前位置相对于文件首的偏移字节数,失败则返回-1

11-格式化读文件-fscanf()

int fscanf(FILE *stream, char *format[,argument...]);

这函数类似于scanf,使用时只是在形参中加了个文件指针。把文件中的内容当作输入即可。

返回成功匹配的参数个数,失败则返回EOF(-1)

示例:fscanf(fp,"%d",&a);

12-格式化写文件-fprintf()

int fprintf( FILE *stream, const char *format, [ argument ]...);

与printf() 类似,使用时只是在形参中加了个文件指针

示例:fprintf(fp, "%s", "Hello World!");

13-读写文件常见问题

13.1 一些函数的读写特性

  1. fgetc()读单个字符,不会跳过空格和换行(空白字符)
  2. fscanf()读数字时,会跳过空格和换行(空白字符)
  3. fscanf()读字符串时,不会跳过空格换行,而是停下类,不会读取空格和换行(空白字符)。
  4. fscanf()可以指定输入格式,如fscanf(fp,"%d,%d",&a,&b);应输入1,2才能正常读取。若输入1t2,则只会正常读取第一个
  5. fgets()会读一行字符,遇到换行结束,会读取换行,将换行翻译为'\0'放入数组末尾
  6. fputs()不会自动加换行符,puts()会。
    1. fputs()可用于所有流,puts()只能用于标准输入输出流
  7.  

13.2 读单个字符时注意字符间的空格,换行,

读单个字符时注意字符间的空白字符(空格,换行),函数不会自动跳过

解决:

  1. 读完加fgetc()。
  2. 一次读一行
  3. 移动光标位置

13.3 读数字时注意最后的换行

读数字时虽然会跳过空白字符,但是读取完最后一个数字后,该数字后的空白字符亦然存在于流中

14-常用的写文件程序

/*
  1-写文件
  一般用于读写文件中的数据,课设可用
 */
#include <stdio.h>
int main(void)
{
	
	FILE *fp;//文件指针
	fp = fopen("002.txt", "w");//打开文件,只写
	if (NULL == fp)//打开文件失败
	{
		perror("open file error!");
		return 0;
	}
	//此处以下是写入内容
	fputc('a',fp);//写入字符'a'
	fprintf(fp, "%s", "Hello World!\n");//格式化写入
	int i;
	for(i=0;i<10;i++)
		fprintf(fp, "%d ",i);//格式化写入
	//此处以上是写入内容
	fclose(fp);//关闭文件
	return 0;
}
 

15-常用的读文件程序

/*
  1-读文件
  一般用于读写文件中的数据,课设可用
 */
#include <stdio.h>
int main(void)
{
	
	FILE *fp;//文件指针
	fp = fopen("002.txt", "r");//打开文件,只读
	if (NULL == fp)//打开文件失败
	{
		perror("open file error!");
		return 0;
	}
	//此处以下,读取文件
	//格式化读取字符串
	char arr[200];
	fgets(arr,14,fp);//能读空格
	//fscanf(fp, "%s", arr);//不能读空格
	int num[10]={};
	//格式化读取数字
	int i;
	for(i=0;i<10;i++)
		fscanf(fp,"%d",&num[i]);
	//此处以上,读取文件
	fclose(fp);//关闭文件
	//输出读取的数据
	puts(arr);
	for(i=0;i<10;i++)
		printf("%d ",num[i]);
	return 0;
}
 
 
 
 
 
posted @ 2023-01-29 00:35  尚方咸鱼  阅读(360)  评论(0编辑  收藏  举报