目录
1.文件属性
1.文件属性
2.fopen和fclose函数
3.文件操作函数
fgetc和fputc
fgets和fputs
fprintf和fscanf
fwrite和fread
4.fseek ftell和rewind函数
文件类型
文件一般分为两种类型:程序文件和数据文件
程序文件简单来说就是我们创造一个编程项目后产生的文件就是程序文件
而我们要用程序操作去操作的文件就是数据文件
文件名
数据文件文件类型
文件指针
{
内容;
}
内容就是一系列该文件的信息
FILE*就是文件指针
fopen
FILE* fopen(const char filename,const char mode)
filename是文件路径,文件路径分为绝对路径和相对路径
绝对路径是从头到尾都要写明白:
fopen("C:\\2020\\c语言\\test5\\test.txt","r");
相对路径是从程序文件开始:
如果和程序文件是一个路径那就
fopen("text.txt","r");
如果位于上一个路径前面加上 ..
fopen("..\\test.txt"."r");
mode是打开方式
如果打开错误,就会返回一个NULL,所以我们得使用前检验一下是否打开成功
规范使用:
#include
#include
int main()
{
FILE* pf=fopen("test.txt","r");
if(pf==NULL)
{
printf("%s", strerror(errno));
return 0;
}
fclose(pf);
pf=NULL;
}
ing fputc(char character, FILE* stream);
int fgetc(FILE* stream);
character就是要输入的字符, stream就是FILE对象的指针
fputc是输出到文本文件里,fgetc就是从文本文件里输入到程序中
注:连续输入会从上一次读到的地方接着往下读取,所有文件输入流函数都一样
示例:
fputc:
#include
#include
int main()
{
FILE* pf = fopen("test.txt", "w");
if (pf == NULL)
{
return 0;
}
//写入
fputc('6', pf);
fputc('6', pf);
fputc('6', pf);
fputc('b', pf);
fputc('i', pf);
fputc('t', pf);
fclose(pf);
pf = NULL;
return 0;
}
可以在你写入的路径里找到一个test的数据文件
打开之后就是写入的信息
fgetc
#include
#include
int main()
{
char c;
FILE* pf = fopen("test.txt", "r");
if (pf == NULL)
{
return 0;
}
//写入
c = fgetc(pf);
printf("%c", c);
c = fgetc(pf);
printf("%c", c);
c = fgetc(pf);
printf("%c", c);
c = fgetc(pf);
printf("%c", c);
c = fgetc(pf);
printf("%c", c);
c = fgetc(pf);
printf("%c", c);
fclose(pf);
pf = NULL;
return 0;
}
结果:
char* fgets(char* string,int n,FILE* stream);
int fputs(const char* string,FILE* stream);
string是字符串地址,n是复制字符数
fgets后会字符串最后自动加一个\n,也就是换行符
示例:
int fprintf ( FILE * stream, const char * format, ... );
int fscanf ( FILE * stream, const char * format, ... );
format是格式
包含要写入流的文本的 C 字符串。
它可以选择包含嵌入的格式说明符,这些说明符由后续附加参数中指定的值替换,并根据请求进行格式化
包含以下
示例:
size_t fwrite(const void* buffer,size_t size,size_t count,FILE* stream);
size_t fread(const void* buffer,size_t size,size_t count,FILE* stream);
buffer:指向大小至少为(大小*计数)字节的内存块的指针,转换为 void*。
size:要读取的每个元素的大小(以字节为单位)size_t是无符号整数类型
count:元素数
可以用来输入和输出结构体
示例:
fwrite
#include
#include
//创建结构体
struct stu
{
char name[10];
int age;
char sex[5];
};
int main()
{
struct stu s1 = {"long",20,"man"};
FILE* pf = fopen("test.txt", "w");
if (pf == NULL)
{
return 0;
}
//写入文件
fwrite(&s1, sizeof(struct stu), 1, pf);
fclose(pf);
pf = NULL;
return 0;
}
fread
#include
#include
//创建结构体
struct stu
{
char name[10];
int age;
char sex[5];
};
int main()
{
struct stu s1 = {0};
FILE* pf = fopen("test.txt", "r");
if (pf == NULL)
{
return 0;
}
//写入文件
fread(&s1, sizeof(struct stu), 1, pf);
printf("%s\n", s1.name);
printf("%d\n", s1.age);
printf("%s\n", s1.sex);
fclose(pf);
pf = NULL;
return 0;
}
结果:
fseek
根据文件指针的位置和偏移量来定位文件指针
int fseek(FILE* stream,long offset,int fputsorigin)
origin:根据右边三个选项决定是从当前文件指针位置开始访问,从文件末尾开始访问,还是从文件起始位置开始访问。
offset:从origin开始的偏移量,正数往右偏移,负数往左偏移
ftell
返回文件指针相对于起始位置的偏移量
long int ftell(FILE* stream);
rewind
让文件指针位置回到文件的起始位置
void rewind(FILE* stream);