目录
一,文件分类
程序文件
数据文件
二,文件
文件名
文件指针
文件的打开和关闭
文件的顺序读写
文件的随机读写
文本文件和二进制文件
文件的结束判定
文件缓冲区
案例
- 程序文件
- 数据文件
一,文件分类
二,文件
如c:\code\test.txt
int main()
{
FILE* pf = fopen("F:\\VS\\Project1\\test.txt", "w");
if (pf == NULL)
{
perror("fopen");
return 0;
}
fclose(pf);
pf = NULL;
return 1;
}
注:文件使用方式
//输入、输出当个字符
int main()
{
FILE* pf = fopen("test.txt", "w+");
if (pf == NULL)
{
perror("fopen");
return 0;
}
//输出/写入字符
fputc('b', pf);
fputc('i', pf);
fputc('t', pf);
//文件指针移动到起始位置
fseek(pf, 0L, SEEK_SET);
//输入/读取字符
printf("%c", fgetc(pf));
printf("%c", fgetc(pf));
printf("%c", fgetc(pf));
fclose(pf);
pf = NULL;
return 1;
}
//输入、输出一行字符
int main()
{
char str[] = "abcde";
FILE* pf = fopen("test.txt", "w+");
if (pf == NULL)
{
perror("fopen");
return 0;
}
//输出/写入字符串
fputs("bit", pf);
//文件指针移动到起始位置
fseek(pf, 0L, SEEK_SET);
//输入/读取字符串
fgets(str, 2, pf); //2个字符包含'\0'
printf("%s", str);
fgets(str, 2, pf); //2个字符包含'\0'
printf("%s", str);
fclose(pf);
pf = NULL;
return 1;
}
//格式化数据输入、输出
struct S
{
char str[100];
int num;
};
int main()
{
struct S s1 = { "bit",10 };
struct S s2 = { {0},0 };
FILE* pf = fopen("test.txt", "w+");
if (pf == NULL)
{
perror("fopen");
return 0;
}
//输出/写入格式化数据
fprintf(pf, "%s ", s1.str);
fprintf(pf, "%d ", s1.num);
//文件指针移动到起始位置
fseek(pf, 0L, SEEK_SET);
//输入/读取格式化数据,截止到空格
fscanf(pf, "%s", s2.str);
fscanf(pf, "%d", &(s2.num));
printf("%s %d", s2.str, s2.num);
fclose(pf);
pf = NULL;
return 1;
}
//二进制输入、输出
struct S
{
char str[100];
int num;
};
int main()
{
struct S s1 = { "bit",10 };
struct S s2 = { {0},0 };
FILE* pf = fopen("test.txt", "w+");
if (pf == NULL)
{
perror("fopen");
return 0;
}
//二进制输出/写入
fwrite(&s1,sizeof(struct S),1,pf);
//文件指针移动到起始位置
fseek(pf, 0L, SEEK_SET);
//二进制输入/读取
fread(&s2, sizeof(struct S), 1, pf);
printf("%s %d", s2.str, s2.num);
fclose(pf);
pf = NULL;
return 1;
}
内存与硬盘读写:
流概率:
标准输入输出流读写
备注:
struct S
{
char name[10];
int num;
float score;
};
int main()
{
struct S s1 = { "lisi",20,99.5f };
char str[100] = { 0 };
//从s1中格式化数据,输出到str
sprintf(str, "%s %d %f", s1.name, s1.num, s1.score);
printf("%s\n", str);
struct S s2 = { 0 };
//从str中读取格式化数据,到s2
sscanf(str, "%s %d %f", s2.name, &(s2.num), &(s2.score));
printf("%s %d %f", s2.name, s2.num, s2.score);
return 0;
}
int main()
{
FILE* pf = fopen("test.txt", "w+");
if (pf == NULL)
{
perror("fopen");
return 0;
}
//输出/写入字符
fputc('b', pf);
fputc('i', pf);
fputc('t', pf);
//文件指针移动到起始位置
fseek(pf, 0L, SEEK_SET);
printf("%c\n", fgetc(pf));
//文件指针移动到末尾位置
fseek(pf, -2L, SEEK_END);
printf("%c\n", fgetc(pf));
//文件指针移动到当前位置
fseek(pf, 0L, SEEK_CUR);
printf("%c\n", fgetc(pf));
//返回当前指针偏移量
printf("%d\n", ftell(pf));
//文件指针移动到起始位置
rewind(pf);
printf("%c\n", fgetc(pf));
fclose(pf);
pf = NULL;
return 1;
}
数据在文件中存储形式
文本文件读取是否结束
二进制文件读取是否结束
//将文件test1.txt,复制到test2.txt
int main()
{
FILE* pfr = fopen("test1.txt", "r");
if (pfr == NULL)
{
perror("pfr");
return 0;
}
FILE* pfw = fopen("test2.txt", "w");
if (pfw == NULL)
{
perror("pfw");
return 0;
}
char c = 0;
//读取失败或文件结束时,均会返回EOF
while ((c = fgetc(pfr)) != EOF)
{
fputc(c, pfw);
}
if (ferror(pfr))
puts("I/0,error when reading!");
else if (feof(pfr))
puts("End of File!");
fclose(pfr);
pfr = NULL;
fclose(pfw);
pfw = NULL;
return 1;
}
#include
#include
int main()
{
FILE* pf = fopen("test.txt", "w");
if (pf == NULL)
{
perror("pf");
return 0;
}
//将代码写入输出缓存区
fputc('a', pf);
//睡眠10s,文件内并未写入内容
Sleep(10000);
//刷新缓存区
fflush(pf);
//睡眠10s,文件内已写入内容
Sleep(10000);
//关闭文件也会刷新缓存区
fclose(pf);
pf = NULL;
return 1;
}
案例