文件处理函数
处理方式
二进制
文本
FILE
文件缓冲区,任何操作都是作用于缓冲区中,将文件的数据读取到缓冲区中,在处理整个文件的时候,速度会更快
fopen
文件的打开方式
"r":只读 :只读取内容 ,如果文件不存在,会打开失败
"w":只写:不打开,往里面写入。 文件存在,则会将原文件内容清空,再写入。如果不存在,则先新建,再新增。
"a":追加:在末尾加新内容。文件存在,添加到末尾
"+" 更新模式
"r+"可读可写,从头开始读写,不存在不会新建
"w+" 可读可写
"a+"可读可写
"b" 二进制方式打开
文本文件处理时用的不多,文件的加解密,压缩时使用
"x" 独占方式打开
读取
getc :从流中取字符用 法: int getc(FILE *stream);
fscanf 根据数据格式从输入流中写入数据 int fscanf(FILE*stream, constchar*format, [argument...]);
fgets char*fgets(char*buf,intbufsize,FILE*stream)
写入
putc 字符ch输出到fp所指的文件中 putc(intch,FILE*fp)
fprintf 格式化输出到一个流/文件中 int fprintf( FILE *stream, const char *format, [ argument ]...)
fputs 将指定的字符串写入到文件流中,其原型为: int fputs(char * string, FILE * stream);
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
//FILE *fp = fopen("D:\\fos.txt", "r+");//使用r+添加,在文件开头会有游标,如果并没有对文件进行读取,游标默认在开头,添加会覆盖开头的值
FILE *fp = fopen("D:\\fos.txt", "a+");//使用a+,将文件默认在结尾
char ch = 0;
while ((ch=getc(fp))!= EOF) //文件不存在 ,getc会出错
{
putchar(ch);
}
printf("\r\nInput (#end):\n");
while ((ch = getchar()) != '#')
{
putc(ch, fp); //写入缓存区
}
fclose(fp); //关闭缓冲区,把缓存区内容写入文件
getchar();
return 0;
}
游标
EOF
ftell 获取当前游标的位置
fseek
位置:
SEEK_SET开头
SEEK_CUR 当前位置
SEEK_END 末尾
#include <stdio.h>
char readoutputch(FILE *fp)
{
char ch = getc(fp);
putchar(ch); //读取输出到屏幕上
return ch;
}
int main()
{
FILE *fp = fopen("D:\\fos.txt", "a+"); //使用a+,将文件默认在结尾
if (fp != NULL) {
char ch = 0;
int count = 0;
while ((ch = getc(fp)) != EOF) //文件不存在 ,getc会出错
{
count++;
putchar(ch);
}
long last = ftell(fp); //linux下last和count一样 ,windows下会把\n计算在内
fseek(fp, 0, SEEK_SET); //游标移动到最前面
readoutputch(fp); //读取当前字符,游标+1
fseek(fp, last, SEEK_CUR); //游标移动到末尾
readoutputch(fp); //读取 值为空, 打印出空格
fseek(fp, -last, SEEK_END); // 游标往前移动 ,到最前面
fclose(fp);//关闭缓冲区,把缓存区内容写入文件
getchar();
return 0;
}