C++打开文件
时间: 2025-05-08 21:16:35 浏览: 24
### C++ 中的文件操作
在 C++ 中,文件操作主要通过 `fstream` 库中的类来完成。以下是关于如何使用这些类以及它们的功能说明:
#### 使用 `ifstream` 进行文件读取
为了从文件中读取数据,可以使用 `std::ifstream` 类。该类允许我们创建一个输入文件流对象,并将其绑定到指定的文件上。
```cpp
#include <iostream>
#include <fstream>
#include <string>
int main() {
std::ifstream file_in;
file_in.open("example.txt", std::ios::in); // 打开文件并设置为只读模式[^1]
if (!file_in.is_open()) { // 检查文件是否成功打开
std::cerr << "无法打开文件!" << std::endl;
return 1;
}
std::string line;
while (getline(file_in, line)) { // 使用 getline 函数逐行读取文件内容
std::cout << line << std::endl;
}
file_in.close(); // 关闭文件流
}
```
上述代码展示了如何利用 `std::ifstream` 对象读取名为 `"example.txt"` 的文件的内容,并打印每一行至控制台。
#### 使用 `ofstream` 进行文件写入
对于向文件写入数据的操作,则需借助于 `std::ofstream` 类。此过程同样涉及创建输出文件流对象并与目标文件关联起来。
```cpp
#include <iostream>
#include <fstream>
#include <string>
int main() {
std::ofstream file_out;
file_out.open("output.txt", std::ios::out | std::ios::app); // 创建/追加模式下打开文件[^3]
if (!file_out.is_open()) {
std::cerr << "无法打开文件进行写入!" << std::endl;
return 1;
}
file_out << "这是新添加的一行文字." << std::endl;
file_out.close();
}
```
这里演示了怎样把字符串写入到一个新的或者已存在的叫做 `"output.txt"` 的文本文件里,在不覆盖原有内容的情况下增加新的记录。
#### 处理含有中文字符路径的情况
当遇到带有中文字符的路径时,默认情况下可能会因为编码问题而导致失败。解决办法之一就是采用 `_wfopen()` 函数代替传统的 `fopen()` 来处理宽字节串形式的路径名[^4]。
```cpp
#include <stdio.h>
#include <wchar.h>
int main(){
const wchar_t *path = L"C:\\测试目录\\文档.txt";
FILE *fp = _wfopen(path,L"w");
if(fp != NULL){
fwprintf(fp,L"%s\n","你好世界");
fclose(fp);
}else{
perror("Error opening file.");
}
}
```
以上实例表明即使面对复杂的非ASCII码集构成的名字也能顺利完成相应的I/O任务。
#### 综合应用:同时支持读写的场景
如果既想读又想修改某个特定位置的数据则需要用到双向流即 `std::fstream`.
```cpp
#include <iostream>
#include <fstream>
using namespace std;
int main () {
char data[100];
fstream myfile ("test.dat", ios::in|ios::out);
if(myfile.is_open()){
cout << "请输入一些东西:\n"; cin.getline(data,100);
myfile<<data; // 向文件写入用户输入的信息
myfile.seekg(0, ios::beg); // 将指针移回起始处准备重新读取
myfile >> data; // 提取出刚才存储进去的部分
cout<<"你刚刚写了:"<<data<<endl;
myfile.close(); // 结束前记得关闭资源
}
else cout << "无法访问 test.dat 文件";
return 0;
}
```
这段程序先让用户键入一段话存放到磁盘上的临时区域之后再把它显示出来验证结果正确与否。
---
阅读全文
相关推荐
















