C语言之文件

news/2025/3/17 13:54:40/

文章目录

前言

一、文件的基本操作

1、用只读模式打开文件

 2、用w只写模式打开并创建文件

3、给文件改名

4、删除文件

二、文本文件写操作

三、文本文件读操作

四、二进制文件写操作

五、二进制文件读操作

六、文件复制

七、文件光标

总结


前言

        文件处理在C语言中是一个重要的概念,通过文件处理可以实现对文件读取、写入、创建、删除等操作。C语言提供了一些标准的文件处理函数和库,如fopen、fclose、fread、fwrite等,这些函数可以帮助程序员进行文件操作。

        在C语言中,文件是以流的形式进行处理的,程序需要先打开文件然后进行读取或写入操作,最后关闭文件流。在操作文件时,需要注意文件的打开方式、读写位置、文件指针的移动等问题,以保证文件操作的正确性和有效性。


一、文件的基本操作

1、用只读模式打开文件

        主要功能是尝试以二进制只读模式打开指定路径下的文件,如果文件打开成功则输出相应信息并关闭文件,如果文件打开失败则输出文件不存在的提示信息。

#include<stdio.h>
#include<stdlib.h>int main()
{FILE* readFile = fopen("D:\\fanwan\\myfile\\bbb.txt","rb"); if (readFile)//如果文件打开成功{printf("文件打开成功");fclose(readFile);//关闭文件流。readFile=NULL;//释放文件指针。}else{printf("文件不存在\n");}return 0;
}

 2、用w只写模式打开并创建文件

        主要功能是尝试创建一个文本文件,并根据文件创建(打开)的结果输出相应的提示信息。

#include<stdio.h>
#include<stdlib.h>int main()
{FILE* pf = fopen("C:/myfile/名单.txt", "wt");if (pf != NULL){puts("创建成功");fclose(pf);pf = NULL;}else {puts("创建失败");}return 0;
}

3、给文件改名

        主要功能是对指定路径下的文件进行重命名操作,并根据重命名的结果输出相应的提示信息。

#include<stdio.h>
#include<stdlib.h>int main()
{int r;r = rename("C:/myfile/名单.txt", "C:/myfile/booklist.txt");printf("%s\n", r == 0 ? "成功" : "失败");
}

4、删除文件

        主要功能是尝试删除指定路径下的文件,并根据删除操作的结果输出相应的提示信息。

#include<stdio.h>
#include<stdlib.h>int main()
{r = remove("c:/myfile/booklist.txt");printf("%s\n", r == 0 ? "成功" : "失败");return 0;
}

 

二、文本文件写操作

        主要尝试对文件进行操作,包括以覆盖重写和追加模式打开文件,并向文件和标准输出(屏幕)输出信息。

#include<stdio.h>
#include<stdlib.h>int main()
{	 //1 覆盖重写模式FILE* pf = fopen("c:/myfile/名单.txt", "wt");//2 打开追加模式FILE* pf = fopen("C:/myfile/名单.txt", "at");if (pf != NULL){//能向屏幕打印 就能向文件输出printf("北京时间:%d:%d %.2f %s\n", 8, 9, 12.6, "hello");putchar('A');puts("how are you");fprintf(pf, "北京时间:%d:%d %.2f %s\n", 8, 9, 12.6, "hello");fputc('A',pf);fputs("how are you",pf);fclose(pf);pf = NULL;}return 0;
}

三、文本文件读操作

        主要功能是从两个不同的文本文件中读取数据,一个文件存储整数,另一个文件存储文本行,然后将读取的数据输出到控制台。

#include<stdio.h>
int main()
{//1 读取若干个整数FILE* pf = fopen("C:/myfile/score.txt", "rt");if (pf != NULL){int n;while (!feof(pf)&& fscanf(pf, "%d,", &n)>0){printf("%d\n",n);}fclose(pf);pf = NULL;}//2 读取若干行文字FILE* pf = fopen("C:/myfile/book.txt", "rt");if (pf != NULL){char str[20];while (!feof(pf)&& fscanf(pf, "%s,", str) > 0){puts(str);}fclose(pf);pf = NULL;}return 0;
}

四、二进制文件写操作

        主要功能是将不同类型的数据以二进制形式写入到指定的文件中。

#include <stdio.h>
#include <string.h>int main ()
{FILE * writeFile=fopen("c:\\myfile\\data.txt","wb");//1 存储一个整型变量int n = -1;fwrite(&n,sizeof(int),1,writeFile);int m = 0x41424344;fwrite(&m,sizeof(int),1,writeFile);//2 存储一个数组int a[] = {97,98,48,49,10,100};fwrite(a,sizeof(int),6,writeFile);fwrite(a,sizeof(a),1,writeFile);fclose(writeFile);return 0;
}

五、二进制文件读操作

        主要目的是从二进制文件 "c:\\myfile\\data.txt" 中读取一个整数和一个整数数组。

#include <stdio.h>
#include <stdlib.h>
typedef struct 
{char a;double b ;int c;
} AAA;
int main()
{FILE * readFile=fopen("c:\\myfile\\data.txt","rb");//1 读取一个整型变量int a;fread(&a,sizeof(int),1,readFile);//2 读取一个数组int arr[100];int len = fread(arr,sizeof(int),100,readFile);fclose(readFile);return 0;
}

六、文件复制

        主要功能是将一个二进制文件c:\myfile\data.txt)的内容复制到另一个二进制文件c:\myfile\data1.txt)中。

#include <stdio.h>
int main()
{FILE * from = fopen("c:\\myfile\\data.txt","rb");FILE * to = fopen("c:\\myfile\\data1.txt","wb");unsigned char buffer[1024];int len;if (from!=NULL&&to!=NULL){while ((len=fread(buffer,sizeof(char),1024,from))>0){fwrite(buffer,sizeof(char),len,to);}fclose(from);fclose(to);}return 0;
}

七、文件光标

        主要演示了文件的读写混合模式操作,包括获取文件指针位置、读取文件内容、重定位文件指针、修改文件内容等操作。

#include<stdio.h>
int main07()
{									//读写混合模式FILE* pf = fopen("C:/myfile/zm.txt", "r+t");if (pf != NULL){printf("文件数据下标:%ld\n", ftell(pf));fgetc(pf);printf("文件数据下标:%ld\n", ftell(pf));char str[20];fscanf(pf, "%4s", str);printf("文件数据下标:%ld\n", ftell(pf));rewind(pf);//回到开头fscanf(pf, "%4s", str);puts(str);//任意定位fpos_t wz;fgetpos(pf,&wz);printf("文件数据下标:%ld\n", ftell(pf));printf("文件数据下标:%ld\n", wz);wz += 4;fsetpos(pf,&wz);fscanf(pf,"%4s",str);puts(str);//修改当前位置的数据fseek(pf,0,SEEK_CUR);// 为修改 重定位  位置fputc('8', pf);fseek(pf,3,SEEK_SET);fputs("6666",pf);fclose(pf);pf = NULL;}return 0;
}


总结

C语言中对文件操作的相关函数主要包括标准库函数和系统调用函数。

  1. 标准库函数:
  • fopen():打开文件并返回一个文件指针,用于后续的读写操作。
  • fclose():关闭文件
  • fprintf():向文件中写入格式化数据。
  • fscanf():从文件中读取格式化数据。
  • fgets():从文件中读取一行数据。
  • fputs():向文件中写入一行数据。
  • fread():从文件中读取指定数量的数据。
  • fwrite():向文件中写入指定数量的数据。
  • feof():检查文件指针是否已经到达文件末尾。
  • rewind():将文件指针重置到文件开头。
  1. 系统调用函数:
  • open():打开文件
  • close():关闭文件
  • read():从文件中读取数据。
  • write():向文件中写入数据。
  • lseek():移动文件指针位置。
  • unlink():删除文件

        在使用文件操作时,需要注意文件的打开方式(读、写、追加等)、文件指针的位置、文件的关闭操作,以避免文件操作问题和资源泄漏。同时,在文件操作过程中也需要注意文件权限、文件路径的合法性等问题。


http://www.ppmy.cn/news/1579818.html

相关文章

微软.NET框架下通信技术理解与实践

微软.NET框架下的Remoting和Web Service两项技术的理解以及它们在实际应用中的分析。 一.NET Remoting 理解 .NET Remoting是一种用于在不同应用程序域&#xff08;AppDomain&#xff09;或进程之间进行通信的技术。它允许对象跨越应用程序域、进程甚至计算机边界进行交互。…

网络安全 与 加密算法

计算机中的网络安全 在本篇中介绍了以下几个方面: 机密性 密码学 对称加密算法(DES, 3DES, AES) 公开秘钥算法 RSA大素数的获取 完整性 散列函数(MD5, SHA-1, 并没有提及算法实现) 报文鉴别(MAC) 数字签名 端点鉴别 应用 SSL(TCP网络安全) 运行时安全 防火墙的基本知…

高效编程指南:PyCharm与DeepSeek的完美结合

DeepSeek接入Pycharm 前几天DeepSeek的充值窗口又悄悄的开放了&#xff0c;这也就意味着我们又可以丝滑的使用DeepSeek的API进行各种辅助性工作了。本文我们来聊聊如何在代码编辑器中使用DeepSeek自动生成代码。 注&#xff1a;本文适用于所有的JetBrains开发工具&#xff0c…

Hive SQL 精进系列:REGEXP 函数的用法

目录 一、引言二、REGEXP 函数基础2.1 基本概念2.2 语法结构作为运算符使用在 WHERE 子句中使用 2.3 参数说明2.4 简单示例 三、常见应用场景3.1 验证数据格式3.2 提取特定信息3.3 数据清洗和转换 四、高级用法4.1 多级条件匹配4.2 结合其他函数使用 五、总结 一、引言 当处理…

java永久代和元空间的区别

嗯&#xff0c;用户现在对Java内存结构中的永久代、元空间以及字符串常量池的位置有疑问。首先&#xff0c;我需要确认用户的问题点在哪里。用户之前的问题涉及到字符串常量池在Java不同版本中的位置变化&#xff0c;以及为什么Java 7将字符串常量池移到堆中&#xff0c;而永久…

Java中按照不同字段进行排序

在Java中&#xff08;默认Java8&#xff09;&#xff0c;假设有一个类定义为&#xff1a; class Pair{int a,b; }现在有一个Pair列表pairs&#xff0c;其类型为ArrayList<Pair>. 问题&#xff1a;&#xff08;1&#xff09;按照a字段从大到小排序并输出 &#xff08;2&a…

大模型-提示词调优

什么是提示词 提示词&#xff08;Prompt&#xff09;在大模型应用中扮演着关键角色&#xff0c;它是用户输入给模型的一段文本指令 。简单来说&#xff0c;就是我们向大模型提出问题、请求或描述任务时所使用的文字内容。例如&#xff0c;当我们想让模型写一篇关于春天的散文&a…

Podman 运行redis 报错

Podman 运行redis 报错 一、报错内容 find: .: Permission denied chown: changing ownership of .: Permission denied二、问题分析 SELinux 模式 SELinux(Security-Enhanced Linux)是一种安全模块,旨在通过强制访问控制(MAC)来增强 Linux 系统的安全性。SELinux 具有…