文件(file)一般指存储在外部介质上数据的集合,比如我们经常使用的.txt,.bmp,jpg..exe,.rmvb等等,下面这篇文章主要给大家介绍了关于C语言文件操作的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
1.操作的准备
c语言中的文件操作相关函数的头文件都是在#include<stdio.h>里
除此之外还得定义一个文件指针对目标文件进行指向操作,一般形式为:FILE *指针变量名;
例如:FILE *fp
2.文件的打开
对于数据的处理一般有两种存放形式:文本文件和二进制文件
想要操作文件,那肯定先得把它打开,而在C语言中一般使用fopen函数打开文件
一般形式为:fopen(文件名,文件操作形式);
该函数成功实现将返回一个文件指针,失败则返回NULL
例如:
FILE* pf = fopen("test.txt", "w");一般为了保证文件正常打开,会进行以下测试:
if (pf == NULL)
{
perror("fopen");
return 1;
}3.文件的使用方式
使用文件的方式如下:
“r”(只读):为输入打开一个文本文件 对文件进行读操作
“w”(只写):为输出打开一个文本文件 对文件进行写操作
“a”(追加): 向文本文件尾添加数据
“rb”(只读): 为输入打开有一个二进制文件
“wb”(只写):为输出打开一个二进制文件对文件进行写操作
“ab”(追加): 向二进制文件尾添加数据
“r+”(读写): 为读写打开一个文本文件
“w+”(读写):为读写建立一个新的文本文件
“a+”(读写): 向文本文件尾添加数据
“rb+”(读写): 为读写打开一个二进制文件
“wb+”(读写):为读写建立一个新的二进制文件
“ab+”(读写): 为读写打开一个进制文件
4.相关的函数
4.1 fputc
从输入流缓冲区中取出下一个字符并将字符放入文本文件中
int fputc ( int character, FILE * stream );样例:
#include<stdio.h>
int main()
{
FILE* pf = fopen("test.txt.txt", "w");
if (pf == NULL)
{
perror("fopen");
return 1;
}
//写文件
char ch = 'a';
for (ch = 'a'; ch <= 'z'; ch++)
{
fputc(ch, pf);
}
fclose(pf);
pf = NULL;
return 0;
}运行结果:
4.2 fgetc
向文本文件中写出一个单个字符
int fgetc ( FILE * stream );样例:(文本文件与fputc调用相同)
#include<stdio.h>
int main()
{
FILE* pf = fopen("test.txt.txt", "r");
if (pf == NULL)
{
perror("fopen");
return 1;
}
//读文件
int ch = 0;
while ((ch = fgetc(pf)) != EOF)
{
printf("%c ", ch);
}
fclose(pf);
pf = NULL;
return 0;
}运行结果:
4.3 fputs
从输入流缓冲区中取出下一个字符串并将字符放入文本文件中
int fputs ( const char * str, FILE * stream );样例:
int main()
{
char arr[256] = { 0 };
FILE* pf = fopen("test.txt.txt", "w");
if (pf == NULL)
{
perror("fopen");
return 1;
}
//写文件
fputs("ssssssssssssssssss\n", pf);
fputs("llllllllllllllllll\n", pf);
fclose(pf);
pf = NULL;
return 0;
}运行结果:
4.4 fgets
向文本文件中写出一个字符串
char * fgets ( char * str, int num, FILE * stream );样例:(文本文件与fputs调用相同)
int main()
{
char arr[256] = { 0 };
FILE* pf = fopen("test.txt.txt", "r");
if (pf == NULL)
{
perror("fopen");
return 1;
}
fgets(arr, 255, pf);
printf("%s", arr);
fgets(arr, 255, pf);
printf("%s", arr);
fclose(pf);
pf = NULL;
return 0;
}运行结果:
4.5 fprintf
格式化输出到一个流文件中
int fprintf ( FILE * stream, const char * format, ... );样例:
struct s
{
char name[20];
int age;
double score;
};
#include<stdio.h>
int main()
{
struct s s = { "雾都",20,98.5 };
FILE* pf = fopen("test.txt.txt", "w");
if (pf == NULL)
{
perror("fopen");
return 1;
}
//写文件
fprintf(pf, "%s %d %lf", s.name, s.age, s.score);
fclose(pf);
pf = NULL;
return 0;
}运行结果:
4.6 fscanf
用于读取数据
int fscanf ( FILE * stream, const char * format, ... );样例:(文本文件与fprintf调用相同)
struct s
{
char name[20];
int age;
double score;
};
#include<stdio.h>
int main()
{
struct s s = { 0 };
FILE* pf = fopen("test.txt.txt", "r");
if (pf == NULL)
{
perror("fopen");
return 1;
}
fscanf(pf, "%s %d %lf", s.name, &(s.age), &(s.score));
printf("%s %d %lf", s.name, s.age, s.score);
/*fprintf(stdout, "%s %d %lf", s.name, s.age, s.score);*/
fclose(pf);
pf = NULL;
return 0;
}运行结果:
4.7 fwrite
将 count 个大小为 length 的对象从名为 buffer 的数组二进制写入输入流文件名。
size_t fwrite(void *buffer, size_t length, size_t count, FILE *filename);样例:
#include<stdio.h>
struct s
{
char name[20];
int age;
double score;
};
int main()
{
struct s s = { "雾都",20,98.5 };
FILE* pf = fopen("test.txt.txt", "w");
if (pf == NULL)
{
perror("fopen");
return 1;
}
//二进制的写
fwrite(&s, sizeof(struct s), 2, pf);
fclose(pf);
return 0;
}运行结果:(因为是转成二进制了,倒也正常)
4.8 fread
二进制读取count大小对象的数量length从输入流filename到名为的数组buffer
size_t fread(void *buffer, size_t length, size_t count, FILE *filename);样例:(二进制文件与fwrite调用相同)
struct s
{
char name[20];
int age;
double score;
};
int main()
{
struct s s = { "雾都",20,98.5 };
FILE* pf = fopen("test.txt.txt", "r");
if (pf == NULL)
{
perror("fopen");
return 1;
}
//二进制的读
fread(&s, sizeof(struct s), 2, pf);
printf("%s %d %lf", s.name, s.age, s.score);
fclose(pf);
return 0;
}运行结果:
到此这篇关于C语言文件操作与相关函数介绍的文章就介绍到这了,更多相关C语言文件操作内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:C语言文件操作与相关函数介绍
- C语言详解float类型在内存中的存储方式 2023-03-27
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- Easyx实现扫雷游戏 2023-02-06
- C++ 数据结构超详细讲解顺序表 2023-03-25
- ubuntu下C/C++获取剩余内存 2023-09-18
- Qt计时器使用方法详解 2023-05-30
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- C语言qsort()函数的使用方法详解 2023-04-26
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
