当前位置: 首页 > article >正文

C语言之文件

文章目录

前言

一、文件的基本操作

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.kler.cn/a/588183.html

相关文章:

  • Docker文件夹上传秘籍Windows下的高效传输之道
  • Java集成WebSocket实现消息推送,详细步骤以及出现的问题如何解决
  • 【C#】Http请求设置接收不安全的证书
  • ES6(1) 简介与基础概念
  • 解决 Redis 后台持久化失败的问题:内存不足导致 fork 失败
  • 带环链表的相关知识点
  • 重要!!! 什么是梯度方差 ; AdaLoRA中的Fisher信息矩阵:核心作用与通俗举例
  • ctfshow-web-351-360-ssrf-wp
  • Python 基础知识整理笔记
  • SGMEA: Structure-Guided Multimodal Entity Alignment
  • ‌React Hooks主要解决什么
  • 使用unsloth进行grpo训练报错及解决方法
  • netty中黏包,半包
  • HDR图像处理:色调映射和色域映射参数
  • 蓝桥杯好题推荐----最大字段和
  • 使用生成对抗网络(GAN)进行人脸老化生成的Python示例
  • 【机器学习chp13--(下)】人工神经网络—优化算法
  • HCIP笔记整理(一)
  • conda的基本使用及pycharm里设置conda环境
  • AI绘画软件Stable Diffusion详解教程(11):图生图进阶篇(局部用上传蒙版重绘)