• 一篇文章搞定c语言文件操作(windows10)


    一,打开和关闭文件

    打开和关闭文件涉及的知识点包括:文件结构指针FILE,文件操作模式、以及库函数fopen()、fclose()。
    1,文件结构指针
    每个被从磁盘读入内存的文件都会在内存中占据一块临时缓冲区,文件结构指针的作用就是指向该缓冲区,方便对缓冲区数据进行操作。
    在这里插入图片描述
    在对文件进行操作时,需要定义一个指向该文件缓冲区的指针:

    FILE *fp;
    
    • 1

    2、文件操作模式
    在打开一个文件时,需要指定打开的模式,打开的模式不同,对文件操作的过程和结果也不同。在这里插入图片描述 3.、fopen ()和fclose()
    fopen()和fclose()必须一起使用,fopen()用于打开文件,对文件进行操作之后,又必须使用fclose()关闭文件,否则缓冲区的数据会有被误用的风险。

    #include 
    #include 
    int all;
    
    int main() {
    
    	printf("file write and read\n");
    	FILE* fp;//文件结构指针,指向内存中打开的临时缓冲区
    	char ch;
    	if ((fp = fopen("D:\\安装包\\test.txt", "w")) == NULL) {//绝对路径需要在文件夹分隔符——反斜杠之前加放斜杠作为转义符,否则会报错。
    		printf("file not exist\n");
    		return 0;
    	}
    	ch = getchar();
    	putchar(ch);
    	while (ch != '#') {
    		fputc(ch, fp);
    		ch = getchar();
    		putchar(ch);
    	}
    	fclose(fp);
    	putchar(10);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    二、文件操作

    对文件进行操作的库函数有如下几种:
    在这里插入图片描述
    1、fgetc()和fput()用于顺序读写文件,其顺序和物理阅读的顺序一样,fget()从文件开头向结尾逐字符读取,fput()则从fp指向的位置逐字符向后写入。
    2.fgets和fputs用于读取字符串,
    在这里插入图片描述

    #include 
    #include 
    #include
    int all;
    
    int main() {
    
    	printf("file write and read\n");
    	FILE* fp1,*fp2;
    	char ch[100];
    	if ((fp1 = fopen("E:\\c\\一朝忽觉京梦醒,半世浮沉雨打萍.txt", "r")) == NULL) {
    		printf("file not exist\n");
    		return 0;
    	}
    	if ((fp2 = fopen("E:\\c\\一朝忽觉京梦醒,半世浮沉雨打萍(副本).txt", "w")) == NULL) {
    		printf("file not exist\n");
    		return 0;
    	}
    	while (!feof(fp1)) {
    		fgets(ch, 10, fp1);
    		fputs(ch, fp2);
    
    	}
    	fclose(fp2);
    	fclose(fp1);
    	putchar(10);
    	return 0;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    3、fprint和fscanf用于格式化输入输出文件
    在这里插入图片描述

    void move(char one, char two)
    {
    	FILE* fp1;
    	if ((fp1 = fopen("E:\\c\\hannoi.txt", "a")) == NULL) {
    		printf("file not exist\n");
    		exit(0);
    	}
    	fprintf(fp1, "%d:%c->%c\n",all, one, two);
    	fclose(fp1);
    	all++;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    4、fread和fwrite用于读写二进制文件。
    在这里插入图片描述

    buffer:是一个地址,对fread来说,它是用来存放从文件读入的数据的存储区的地址,对fwrite来说,它是指把从该地址开始的存储区的数据向文件写出。
    size:要读多少字节的数据
    count:要读多少个大小为size的数据
    fp:文件指针。

    三、随机读写文件

    包括几个函数:
    1、rewind

    rewind(fp);//回到fp所指文件的开头
    
    • 1

    2、fseek改变文件的标记位置
    在这里插入图片描述
    位移量表示为字节
    起始点的含义如下:
    在这里插入图片描述

    在这里插入图片描述
    3、ftell函数测定文件指针的当前位置
    在这里插入图片描述

    四、文件的读写出错检测

    1、ferror
    在调用前面介绍的各种输入输出函数(fputc,fgetc,fputs,fgets,fread,fwrite,fprintf,fscanf)时,除了函数返回值可以检错之外,还可以用ferror函数进行检测。

    ferror(fp);//返回值为0表示未出错,非0则表示出错,
    
    • 1

    2、clearerr
    clear函数的作用是使文件结束或者文件出错标志重置为0,比如在调用调用一个输入输出函数时出错,ferror的值变为了非0,应该立即调用clearerr函数将其置为0.

    clearerr(fp);
    
    • 1
  • 相关阅读:
    程序分析与优化 - 6 循环优化
    TorchV的RAG实践分享(三):解析llama_index的数据存储结构和召回策略过程
    十五分钟上手JavaScript之面向对象
    Spring cloud stream实现Kafka的消息收发
    【王道代码】【2.3链表】d1
    delphi调用edge的截图功能
    【入门】二分查找右侧边界
    技术分享 | 需要小心配置的 gtid_mode
    JavaWeb(一)
    “四大高手”为你的 Vue 应用程序保驾护航
  • 原文地址:https://blog.csdn.net/qq_32174521/article/details/126285695