本文目录导读:
在C语言编程中,文件操作是处理数据的重要手段之一,通过文件操作,我们可以将程序运行时的数据保存到磁盘上,或者从磁盘读取预先存储的数据,本文将详细介绍如何在C语言中使用文件进行数据的读写操作。
图片来源于网络,如有侵权联系删除
文件操作基础
文件指针与文件流
在C语言中,所有文件的输入输出都是通过文件指针(FILE*)来实现的,文件指针指向一个结构体,该结构体包含了文件的相关信息,如文件位置、状态等。
#include <stdio.h> int main() { FILE *fp; // 定义文件指针 fp = fopen("example.txt", "r"); // 以只读方式打开文件 if (fp == NULL) { perror("Error opening file"); return -1; } // 使用文件指针进行文件操作... fclose(fp); // 关闭文件 return 0; }
打开和关闭文件
使用fopen()
函数可以打开一个文件,其原型为:
FILE *fopen(const char *filename, const char *mode);
filename
: 要打开的文件名。mode
: 指定文件的操作模式,可以是以下几种:"r"
:以只读方式打开文件。"w"
:以写入方式打开文件,如果文件不存在则创建新文件。"a"
:以追加方式打开文件,向文件末尾添加数据。"rb"
,"wb"
,"ab"
:分别是以二进制形式打开文件用于读写或追加。
使用fclose()
函数可以关闭一个已经打开的文件,其原型为:
int fclose(FILE *stream);
文件定位
有时我们需要在文件中进行随机访问,这时可以使用fseek()
函数来实现,其原型为:
int fseek(FILE *stream, long int offset, int whence);
stream
: 文件指针。offset
: 从whence
指定的起始点开始移动的字节数。whence
: 起始点的类型,可以是:SEEK_SET
: 文件开头。SEEK_CUR
: 当前位置。SEEK_END
: 文件结尾。
返回值:成功时返回0,失败时返回非0值。
读取和写入文件
文本文件的读写
文本文件的读写通常使用fscanf()
和fprintf()
函数来完成。fscanf()
用于从文件中读取数据,而fprintf()
用于将数据写入文件。
图片来源于网络,如有侵权联系删除
// 写入数据 fprintf(fp, "%d %s\n", age, name); // 读取数据 fscanf(fp, "%d %s", &age, name);
二进制文件的读写
对于二进制文件的读写,我们通常使用fread()
和fwrite()
函数,这些函数允许我们直接按字节读写数据。
struct Student { int id; char name[50]; }; Student s; // 写入二进制文件 fwrite(&s, sizeof(Student), 1, fp); // 读取二进制文件 fread(&s, sizeof(Student), 1, fp);
错误处理
在进行文件操作时,应始终检查返回值以确保操作成功执行,当调用fopen()
时,若文件无法打开,fopen()
会返回NULL,此时应该进行错误处理。
if (fp == NULL) { perror("Error opening file"); return -1; }
高级文件操作
文件复制
复制一个文件可以使用标准库中的copyfile()
函数,但更常用的方法是手动实现。
void copyFile(const char *source, const char *destination) { FILE *src, *dst; char ch; src = fopen(source, "r"); dst = fopen(destination, "w"); while ((ch = fgetc(src)) != EOF) { fputc(ch, dst); } fclose(src); fclose(dst); }
文件搜索与替换
要在一个文件中查找特定字符串并进行替换,可以通过循环逐行读取文件,然后使用str_replace()
函数进行替换。
#define MAXLINE 1024 char *str_replace(char *orig, char *rep, char *with) { char result[MAXLINE]; char *ins; char *tmp; int len_rep; int len_with; int lenOrig; int count = 0; // Calculate the actual lengths len_rep = strlen(rep); if (len_with != 0) len_with = strlen(with); lenOrig = strlen(orig); // Make sure
标签: #c语言如何用文件存储
评论列表