首页 > 其他分享 >C语言基础教学(文件操作)

C语言基础教学(文件操作)

时间:2023-06-17 16:32:13浏览次数:47  
标签:文件 FILE err 教学 file printf C语言 size

(文章目录)


前言

这篇文章我们来讲解C语言中的文件操作,文件操作在C语言中算是一个比较重要的知识点,我们每天都在和文件打交道,各种文件夹的打开和关闭操作,那么这篇文件带大家学习如何使用C语言中的文件操作来完成这个工作。

一、文件操作基本介绍

C语言提供了一组函数,可以用于进行文件操作。这些函数包括打开文件、关闭文件、读取文件内容和写入文件内容等。下面是对C语言中文件操作的几个常用函数的介绍和使用方法:

打开文件: 函数原型:FILE *fopen(const char *filename, const char *mode); 描述:用于打开指定文件并返回一个指向该文件的指针。 参数:

filename:要打开的文件的名称(包含路径),可以是相对路径或绝对路径。 mode:打开文件的模式,包括 “r”(只读)、“w”(写入)、 “a”(追加)等等。 返回值:如果成功,返回一个指向文件的指针;如果失败,返回空指针(NULL)。

关闭文件: 函数原型:int fclose(FILE *stream); 描述:用于关闭一个已打开的文件。 参数:stream 是指向 FILE 结构的指针,它表示要关闭的文件。 返回值:如果成功,返回 0;如果失败,返回 EOF(-1)。

读取文件内容: 函数原型:size_t fread(void *ptr, size_t size, size_t count, FILE *stream); 描述:从文件中读取数据到指定的内存区域。 参数:

ptr:指向要读取数据存储位置的指针。 size:每个数据项的大小(以字节为单位)。 count:要读取的数据项的个数。 stream:指向 FILE 结构的指针,表示要读取的文件。 返回值:返回已成功读取的数据项个数。

写入文件内容: 函数原型:size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream); 描述:将指定内存区域的数据写入文件。 参数:

ptr:指向要写入数据的内存区域的指针。 size:每个数据项的大小(以字节为单位)。 count:要写入的数据项的个数。 stream:指向 FILE 结构的指针,表示要写入的文件。 返回值:返回已成功写入的数据项个数。 其他常用的文件操作函数:

fseek:在文件中定位到指定的位置。 ftell:获取文件指针的当前位置。 feof:检测文件流是否已到达文件末尾。 这些函数提供了基本的文件操作功能,你可以根据具体的需求使用它们来读取和写入文件。请记得在使用完文件后,要调用 fclose 函数来关闭文件,以释放系统资源。

二、编程练习

在VS中这些操作函数都变为了带有_s的函数了,那么我们就在VS的环境下来练习一下文件操作吧。

当使用带 _s 结尾的函数时,需要注意该系列函数在 C11 标准中引入,旨在提供更安全的编程环境。以下是使用一些带有 _s 的文件操作函数的示例:

1. 使用 fopen_s 打开文件:

#include <stdio.h>

int main() {
	FILE* file = NULL;
	errno_t err = 0;

	err = fopen_s(&file, "example.txt", "r");
	if (err != 0) {
		printf("无法打开文件。\n");
		return 1;
	}

	// 文件操作...

	fclose(file);
	return 0;
}

2. 使用 fwrite_s 写入文件:

#include <stdio.h>

int main() {
	FILE* file = NULL;
	errno_t err = 0;

	err = fopen_s(&file, "example.txt", "w");
	if (err != 0) {
		printf("无法打开文件。\n");
		return 1;
	}

	const char* content = "Hello, World!";
	size_t size = strlen(content);

	err = fwrite_s(content, size, sizeof(char), size, file);
	if (err != 0) {
		printf("写入文件时发生错误。\n");
	}

	fclose(file);
	return 0;
}

3. 使用 fgets_s 读取一行文本:

#include <stdio.h>

int main() {
	FILE* file = NULL;
	errno_t err = 0;

	err = fopen_s(&file, "example.txt", "r");
	if (err != 0) {
		printf("无法打开文件。\n");
		return 1;
	}

	char buffer[100];
	char* result = fgets(buffer, sizeof(buffer), file);
	if (result != NULL) {
		printf("读取到的内容:%s\n", buffer);
	} else {
		printf("读取文件时发生错误。\n");
	}

	fclose(file);
	return 0;
}

4. 使用 fwrite_s 写入二进制数据:

#include <stdio.h>

int main() {
	FILE* file = NULL;
	errno_t err = 0;

	err = fopen_s(&file, "example.bin", "wb");
	if (err != 0) {
		printf("无法打开文件。\n");
		return 1;
	}

	int data[] = { 1, 2, 3, 4, 5 };
	size_t size = sizeof(data);
	size_t count = sizeof(data) / sizeof(int);

	err = fwrite_s(data, size, count, file);
	if (err != 0) {
		printf("写入文件时发生错误。\n");
	}

	fclose(file);
	return 0;
}

5. 使用 fread_s 读取二进制数据:

#include <stdio.h>

int main() {
	FILE* file = NULL;
	errno_t err = 0;

	err = fopen_s(&file, "example.bin", "rb");
	if (err != 0) {
		printf("无法打开文件。\n");
		return 1;
	}

	int data[5];
	size_t size = sizeof(data[0]);
	size_t count = sizeof(data) / size;

	err = fread_s(data, sizeof(data), size, count, file);
	if (err != 0) {
		printf("读取文件时发生错误。\n");
	}

	fclose(file);

	// 打印读取到的数据
	for (int i = 0; i < 5; i++) {
		printf("%d ", data[i]);
	}
	printf("\n");

	return 0;
}

在这个示例中,我们使用 fread_s 函数从文件中读取二进制数据,并将数据存储到整型数组 data 中。size 参数指定了每个数据项的大小,count 参数指定了要读取的数据项数量。

这些示例展示了如何使用 _s 后缀的文件读写函数来进行二进制数据的读写操作。请根据你的具体需求进行相应的修改和适应。记得在使用完文件后,要使用 fclose 函数关闭文件以释放资源。

总结

本篇文章就讲解到这里希望大家可以学会C语言中的文件编程。

标签:文件,FILE,err,教学,file,printf,C语言,size
From: https://blog.51cto.com/u_16153875/6505325

相关文章

  • C# 报错:xxx正由另一进程使用,因此该进程无法访问此文件
    https://www.cnblogs.com/whr2071/p/16070974.html出现原因使用FileStream打开一个文件后又想要操作这个文件;业务场景我打开这个文件后,获取其md5,之后再把这个文件移动到指定位置。后续移动时就会报这个错。分析System.IO.FileStreamfst=newSystem.IO.FileStream(filePat......
  • 如何翻译 Markdown 文件?-2-几种商业及开源解决方案介绍
    背景近期在搭建英文博客-<e-whisper.com>,需要对现有的所有中文Markdown翻译为英文。需求如下:将Markdown文件从中文(zh-CN)翻译为英文(en)翻译后要保留Markdown的完整格式部分Markdownblock不需要翻译,如:front-matter、代码块等但是实际使用中,试了好几款翻译(......
  • 如何翻译 Markdown 文件?-2-几种商业及开源解决方案介绍
    背景近期在搭建英文博客-<e-whisper.com>,需要对现有的所有中文Markdown翻译为英文。需求如下:将Markdown文件从中文(zh-CN)翻译为英文(en)翻译后要保留Markdown的完整格式部分Markdownblock不需要翻译,如:front-matter、代码块等但是实际使用中,试了好几款翻译......
  • docker日志文件过大
    发现服务器磁盘空间不足,其中有很多/var/lib/docker/overlay2/..#df-hFilesystemSizeUsedAvailUse%Mountedonudev3.8G03.8G0%/devtmpfs770M1.3M769M1%/run/dev/vda159G55G2.0G97%/tmpfs......
  • 基于Hexo和Butterfly创建个人技术博客,(2) 博客站点配置,Hexo框架_config.yml配置文件细
    Hexo官司网查看这里个人站点效果查看这里本章目标:掌握hexo框架_config.yml配置文件的配置方法特别说明:本文中的配置是建站必要的配置,表格单元格内有重要对于Hexo提供的扩展配置会在另外的章节随着功能一起讲解,因这些扩展功能全是可选的在建站时不一定会需要;yaml文件的值可带引......
  • 删除docker环境里jupyter下的回收站文件
    linux下的回收站文件夹在:~/.local/share/Trash/files/*删除docker里jupyterlablinux环境下的回收站文件,我的docker默认安装目录是:/data/docker/rm-rf/data/docker/overlay2/*/merged/root/.local/share/Trash/files/* 设置不进回收站vim.jupyter/jupyter_lab_confi......
  • Python 文件操作(转载)
    Python文件操作操作文件时,一般需要经历如下步骤打开文件操作文件一、打开文件文件句柄=open('文件路径','模式')打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。打开文件的模式有r,只读模式(默认)。w,只......
  • 文件
    在程序设计中文件有两种:程序文件,数据文件。文件类型:根据数据的组织形式,数据文件被称为文本文件或二进制文件数据在内存中以二进制的形式储存,如果不加转换的输出到外存,就是二进制文件文件指针:缓冲文件中,关键的概念是“文件类型指针”,简称“文件指针”。scanf/printf是针对标准输入......
  • C语言中的转义字符及注意事项
    在C语言中,转义字符是由一个反斜杠(\)和一个特定字符组成的组合。它们用于表示一些特殊的控制字符,例如在字符串中插入换行符或者制表符。当编译器遇到一个反斜杠时,它会将其后面的字符解释为一个转义字符,简单来说,转义字符就是反斜杠加上某个特定的字符,改变其原本含义,来表示另一个含义......
  • 通过Systemctl管理自定义linux服务文件
    Systemd默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,真正的配置文件存放在那个目录。systemctlenable命令用于在上面两个目录之间,建立符号链接关系。sudosystemctlenable[example]等同于sudoln-......