简介:最近在复习C++在写一个停车场管理系统项目的时候突然遇到了关于文件的处理,感觉忘记的差不多了,重新复习了一下,也顺便写一下笔记,当然在一个文章中有很多细节都没有进行深入的研究,只是知道一些基本的用法。主要感觉在学完数据库后再用文件系统进行数据的存储有一些奇怪,但是为了复习还是选择的再过一遍。
数据类型:
ofstream: | 该数据类型表示输出文件流,用于创建文件并向文件写入信息。 |
ifstream: | 该数据类型表示输入文件流,用于从文件读取信息。 |
fstream: | 该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。 |
打开文件:
open()函数:open() 函数是 fstream、ifstream 和 ofstream 对象的一个成员。
void open(const char *filename, ios::openmode mode);
参数说明:
const char*filename:文件名称实际上是文件的路径
直接路径:c:/c++/c++.txt 适用于任何方式
间接路径:c++.txt 文件和.cpp文件在同一个文件夹下面
个人的总结:从维护的角度来讲,采用的路径一般是间接路径,反正就是一一般你要使用的文件基本上都和你的源程序在一起,在这种情况下如果我们进行程序的转移的话就不用再去考虑文件位置变化的问题了。
ios::openmode mode:打开文件的方法可以多个进行组合用逻辑或
打开方式: | 功能描述: |
ios::app | 追加模式。所有写入都追加到文件末尾。 |
ios::ate | 文件打开后定位到文件末尾。 |
ios::in | 打开文件用于读取。 |
ios::out | 打开文件用于写入。 |
ios::trunc | 如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0。 |
实例演示:
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
fstream file("file.txt");
if (file.is_open())
{
cout << "文件打开成功!" << endl;
}
else
{
cout << "文件打开失败!" << endl;
}
return 0;
}
解释:
fstream默认的是读写的方式打开文件,这是间接的文件打开方式,这种情况是比较简单的,文件和源程序在一起:
文本文件也可以在源文件的上一层,这个时候要用“.”运算符返回上一层在打开具体的方法可以自行查阅。
is_open()函数:用来检验文件是否打开成功,这个判断在你进行文件的读写操作前是很有意义的,如果文件打开失败了,其他的操作都没什么意义。
文件关闭函数:
void close(): 通过对象进行直接调用
写文件:
使用流插入运算符( << )向文件写入信息,就像使用该运算符输出信息到屏幕上一样。唯一不同的是,在这里您使用的是 ofstream 或 fstream 对象,而不是 cout 对象。
读文件:
使用流提取运算符( >> )从文件读取信息,就像使用该运算符从键盘输入信息一样。唯一不同的是,在这里您使用的是 ifstream 或 fstream 对象,而不是 cin 对象。
文件操作流程:
读文件:
1、声明头文件 #include<fstream>
2、实例化对象: ifstream wfile;
3、文件打开方式:file.open("文件的路径",打开方式),文件打开之后要判断文件是否打开成功。file.is_open()返回值是bool型,成功true,失败false
4、进行文件操作
5、关闭文件
代码演示:
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main()
{
ifstream readFile;
readFile.open("file.txt", ios::in);
if (readFile.is_open())
{
cout << "文件打开成功!" << endl;
cout << "类容如下:" << endl;
char buff[1000] = { 0 };
while (readFile >>buff)
{
cout << buff << endl;
}
}
else
{
cout << "文件打开失败!" << endl;
}
return 0;
}
运行结果:
采用“>>”运算符进行读取文件时, 它会将空格作为终止条件,在这种情况下没有办法进行一行一行的输出。
如果输出乱码可以参考:https://jingyan.baidu.com/article/ff42efa9e04733c19e2202f4.html
TXT文件默认的是UTF-8编码格式,我们要将其改为ANSI编码格式,这个具体原因我也不知道。
写文件:
1、声明头文件 #include<fstream>
2、实例化对象:fstream rwfile; ofstream rfile;
3、文件打开方式:file.open("文件的路径",打开方式)
4、进行文件操作
5、关闭文件
区别:写文件是不需要判断文件是否打开成功的,因为在写文件时如果文件不存在,程序会自动创建一个文件。
代码部分:
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main()
{
ofstream writeFile;
writeFile.open("wirtefile.txt", ios::out);
string name = "高尔基";
string speaking = "书籍是人类进步的阶梯";
writeFile << name << " " << speaking;
writeFile.close();
return 0;
}
输出部分: