文件处理:C++的fstream类

  • 基本操作
    • 读写文件
      • ifstream 读取文件 —— 可使用 >>、getline()
      • ofstream 写入文件 —— 可使用 <<、write()
      • fstream 支持读、写双向操作
    • 定位文件
      • seekg
      • seekp
    • 检测状态
      • isopen()
      • fail()
      • eof()
      • good()
  • 示例

文件的打开与关闭

打开写入关闭示例代码(cpp)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <fstream>// 首先要引入fstream
#include <string>

using ll = long long;
using d = double;
using namespace std;

int main() {
//打开文件
//先定义后打开
fstream myfile;
myfile.open("test.txt",ios::out);// 以写入的方式打开文件,如果文件不存在则创建文件

//也可以在定义时直接打开文件
//fstream myfile("test.txt",ios::out);

//对文件进行操作
myfile<<"Hello, World!"<<endl;// 向文件中写入内容

myfile.close();// 关闭文件

cout<<"文件操作完成!"<<endl;

return 0;
}
## 打开模式说明:下面时使用表格展示打开模式的说明示例: | 模式 | 说明 | | --- | --- | | std::ios::in | 以读的方式打开文件 | | std::ios::out | 以写的方式打开文件,如果文件不存在则创建文件 | | std::ios::app | 以追加的方式打开文件,写入内容会追加到文件末尾 (append) | | std::ios::ate | 以读写的方式打开文件,文件指针位于文件末尾 (at end) | | std::ios::binary | 以二进制的方式打开文件 |

多个模式之间用“ | ”运算符连接,例如:

1
2
// 以二进制模式打开文件进行读写
fstream binaryFile("binary.bin", ios::in | ios::out | ios::binary);

in与out的关系理解

如果文件不使用close()关闭会有什么问题?
1、资源泄露:每次打开文件都会分配一些系统资源,如果不及时关闭文件,可能会导致资源泄露,最终可能会耗尽系统资源,导致程序崩溃。
2、文件锁定:如果文件被打开但未关闭,其他程序可能无法访问该文件,因为它可能被锁定。这会导致其他程序无法读取或写入该文件,影响系统的正常运行。
3、数据不稳定:未关闭的文件可能会导致数据不稳定,因为数据可能未完全写入文件,或者文件指针未正确更新。这可能会导致数据丢失或文件损坏。


文件的写操作

文件的写操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <fstream>// 首先要引入fstream
#include <string>

using ll = long long;
using d = double;
using namespace std;

int main() {
fstream fobj("a.txt",ios::out);
// ofstream fobj("a.txt");

//对文件是否打开进行检查
if(!fobj.is_open()){
cout<<"文件还没有打开,并不能操作"<<endl;
}

//对文件进行写操作

// 1、按照行来写
// fobj<<"卧类格斗"<<endl;

// 2、按照字符方式来写入
// char mychar=65;
// while (mychar<=90)
// {
// fobj.put(mychar);
// mychar++;
// }

// 3、使用write()
char mydata[]="卧类格斗";
fobj.write(mydata,sizeof(mydata));



fobj.close();// 关闭文件

cout<<"finish"<<endl;
return 0;
}

文件的读操作

文件的读操作