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语言中对文件操作的相关函数主要包括标准库函数和系统调用函数。
- 标准库函数:
fopen()
:打开文件并返回一个文件指针,用于后续的读写操作。fclose()
:关闭文件。fprintf()
:向文件中写入格式化数据。fscanf()
:从文件中读取格式化数据。fgets()
:从文件中读取一行数据。fputs()
:向文件中写入一行数据。fread()
:从文件中读取指定数量的数据。fwrite()
:向文件中写入指定数量的数据。feof()
:检查文件指针是否已经到达文件末尾。rewind()
:将文件指针重置到文件开头。
- 系统调用函数:
open()
:打开文件。close()
:关闭文件。read()
:从文件中读取数据。write()
:向文件中写入数据。lseek()
:移动文件指针位置。unlink()
:删除文件。
在使用文件操作时,需要注意文件的打开方式(读、写、追加等)、文件指针的位置、文件的关闭操作,以避免文件操作问题和资源泄漏。同时,在文件操作过程中也需要注意文件权限、文件路径的合法性等问题。