磁盘文件分为文本文件和二进制文件。
区分二者很简单,我们可以选定一个文件,以记事本打开,如果其中的内容你能看懂,他就是一个文本文件,相反,如果是一堆你看不懂的东西,那他就是二进制文件。
常见的文本文件有.c .txt .cpp .h等。
要使用文件我们首先要打开文件:
cpp
#include<stdio.h>
FILE* fopen(const char* filename,const char* mode);
//filename:需打开的文件名(路径) mode:打开文件的模式设置
//此方式不安全,安全方法在下方例子中
若成功打开会返回文件指针,若失败则返回NULL。
mode有:
r:只读取,若文件不存在,fopen调用失败
w:写入,若文件不存在则创建,若文件存在则清空
a:追加写入,若文件不存在则创建
r+:既能读又能写,文件必须存在
w+:既能读又能写,若文件不存在则创建,若文件存在则清空
a+:既能读又能写,若文件不存在则创建
二进制文件的打开方式要在以上这些方式后加一个b
如rb,wb,ab,rb+,wb+,ab+
具体写入区别:例如:原本文件里如果是abcdefg,然后用几种写入方式分别写入1234
r+:1234efg
w/w+:1234
r/r+:abcdefg1234
例子:
cpp
#include<stdio.h>
int main()
{
//FILE* pFile = fopen("D:\\11111.txt", "r");//不安全
//注意把所有跟路径相关字符串中的\补成\\
FILE * pFile = NULL;
fopen_s(&pFile, "D:\\11111.txt", "r");
fclose(pFile);//关闭文件
return 0;
}
在打开和关闭文件中,进行操作文件。
读取:
cpp
#include<stdio.h>
int main()
{
FILE * pFile = NULL;
fopen_s(&pFile, "D:\\11111.txt", "r+");
char buf[1024] = { 0 };
//读取
size_t size=fread(buf, 1, 1024, pFile);//参数分别为数据的存储位置,项目大小,要读取项目的最大数量,指向FILE结构的指针
//当数为2和4时 2*4=8 4表示项
//printf("%s\n", buf);
//printf("%d\n", size);//当文件中为abcdefg,当2和4时显示读了3项 6字节 因为只有前三项读满了
fclose(pFile);//关闭
return 0;
}
写入:
cpp
#include<stdio.h>
int main()
{
FILE * pFile = NULL;
fopen_s(&pFile, "D:\\11111.txt", "r+");
fwrite("1234", 1, 4, pFile);
//参数分别为指向要写入的数据的指针,项大小,要写入项的最大数量,指向FILE的指针
fclose(pFile);
return 0;
}
cpp
#include<stdio.h>
int main()
{
FILE * pFile = NULL;
fopen_s(&pFile, "D:\\11111.txt", "r+");//例:此时文件内为abcdefg
char buf[1024] = { 0 };
size_t size=fread(buf, 1, 4, pFile);//只读前四个
fseek(pFile, 0, SEEK_CUR);//从读到的位置开写
//从读到写或从写到读,若没有经历文件尾的话必须调用函数去干预,否则会出错
fwrite("1234", 1, 4, pFile);
//此时文件abcd1234
fclose(pFile);//关闭
return 0;
}