今天给大家分享文件操作的知识~
文件打开和关闭
fopen(): 用于打开文件,并返回一个指向该文件的文件指针。语法:
FILE *fopen(const char *filename, const char *mode);
fclose(): 用于关闭文件。语法:int fclose(FILE *stream);
文件读取和写入
读取文件
- fgetc(): 逐字符读取文件。语法:
int fgetc(FILE *stream);
- fgets(): 逐行读取文件。语法:
char *fgets(char *str, int n, FILE *stream);
- fread(): 以二进制形式读取文件。语法:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
写入文件
- fputc(): 写入一个字符到文件。语法:
int fputc(int c, FILE *stream);
- fputs(): 写入一个字符串到文件。语法:
int fputs(const char *str, FILE *stream);
- fwrite(): 以二进制形式写入文件。语法:
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
文件定位
- fseek(): 设置文件指针的位置。语法:
int fseek(FILE *stream, long int offset, int whence);
- ftell(): 获取文件指针的当前位置。语法:
long int ftell(FILE *stream);
- rewind(): 将文件指针重新设置到文件开头。语法:
void rewind(FILE *stream);
文件状态
- feof(): 检查文件是否已到达文件末尾。语法:
int feof(FILE *stream);
- ferror(): 检查文件是否有错误发生。语法:
int ferror(FILE *stream);
- clearerr(): 清除文件错误标志。语法:
void clearerr(FILE *stream);
文件操作辅助函数
- remove(): 删除文件。语法:
int remove(const char *filename);
- rename(): 重命名文件。语法:
int rename(const char *old_filename, const char *new_filename);
- tmpfile(): 创建临时文件。语法:
FILE *tmpfile(void);
- tmpnam(): 创建唯一的临时文件名。语法:
char *tmpnam(char *str);
文件打开模式
文件在C语言中可以以不同的方式打开和使用,这些方式由文件打开模式(File Open Modes)来定义。这些模式决定了程序对文件的访问权限和行为。以下是常见的文件打开模式:
- 只读模式
“r”:只读模式。文件必须存在。允许读取文件内容,但不允许对文件进行写操作。如果文件不存在,打开文件会失败。 - 只写模式
“w”:只写模式。文件不存在则创建新文件,如果文件已存在,则会清空文件内容。允许写入文件内容,但不允许读取文件。如果文件打开成功,则指针位于文件开头。 - 追加模式
“a”:追加模式。文件不存在则创建新文件,文件指针位于文件末尾。允许在文件末尾追加写入内容,不允许读取或修改文件中已有的内容。 - 读写模式
“r+”:读写模式。文件必须存在。允许读取和写入文件内容。指针位于文件开头。如果文件不存在,打开文件会失败。
“w+”:读写模式。文件不存在则创建新文件,如果文件已存在,则会清空文件内容。允许读取和写入文件内容。如果文件打开成功,则指针位于文件开头。
“a+”:读写模式。文件不存在则创建新文件,文件指针位于文件末尾。允许读取和在文件末尾追加写入内容。可以读取文件中已有的内容。 - 二进制模式
在上述模式后添加**“b”**表示二进制模式。例如,“rb”、“wb”、“ab”、“r+b”、“w+b”、“a+b”。二进制模式用于处理二进制文件,如图像、音频等。
文件操作实例:
实现以下功能 :将一个文件的内容复制到另一个文件中(如果该文件不存在则新建一个文件)
#include <stdio.h>
int main() {
FILE *sourceFile, *destinationFile;
char sourceFileName[100], destinationFileName[100];
char ch;
printf("请输入要复制的文件名:");
scanf("%s", sourceFileName);
// 打开源文件
sourceFile = fopen(sourceFileName, "r");
if (sourceFile == NULL) {
printf("无法打开文件或文件不存在。\n");
return 1;
}
printf("请输入目标文件名:");
scanf("%s", destinationFileName);
// 创建或打开目标文件
destinationFile = fopen(destinationFileName, "w");
if (destinationFile == NULL) {
printf("无法创建或打开目标文件。\n");
fclose(sourceFile);
return 1;
}
// 复制源文件内容到目标文件
while ((ch = fgetc(sourceFile)) != EOF) {
fputc(ch, destinationFile);
}
printf("文件内容复制成功!\n");
// 关闭文件
fclose(sourceFile);
fclose(destinationFile);
return 0;
}