You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C++程序读写文件时遇文件无法打开错误,求技术排查

解决C++文件无法打开及读写vector到文件的问题

看你遇到的问题,核心是打不开hours1.txt,还要完成读数据到vector再写入另一个文件的流程。我先给你排查文件打不开的常见坑,再给你完整的可运行代码。

文件打不开的常见原因

  • 文件路径不匹配:默认情况下,程序会在它的运行工作目录查找文件。如果你的hours1.txt没放在编译后的exe同目录,或者IDE的项目根目录(比如VS的项目文件夹),就会找不到。要么把文件移过去,要么用绝对路径,比如ifstream inFile("C:/Users/xxx/Documents/hours1.txt");(Windows下注意用斜杠或者双反斜杠)。
  • 没检查文件打开状态:你原来的代码里没判断文件是否成功打开,这会导致后续操作直接崩溃或者无反应。一定要加判断逻辑!
  • 缺少必要头文件:代码里用到了vectorfstream这些工具,得提前包含对应的头文件,不然编译都通不过。

修正后的完整代码

#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
// 如果需要格式化输出小数,再加#include <iomanip>

using namespace std;

struct PayRecords{
    char lastName[50];
    char firstName[50];
    double hW;  // 假设是工作时长(hours worked)
    double hoW; // 假设是时薪(hourly wage)
};

int main() {
    vector<PayRecords> payInfo;
    PayRecords data;

    // 打开输入文件,强制检查是否成功
    ifstream inFile("hours1.txt");
    if (!inFile.is_open()) {
        cerr << "Error: 无法打开hours1.txt文件!" << endl;
        cerr << "请检查文件路径是否正确,或者文件是否存在。" << endl;
        return 1; // 异常退出程序
    }

    // 读取文件内容到vector(假设文件每行格式:姓 名 工作时长 时薪)
    while (inFile >> data.lastName >> data.firstName >> data.hW >> data.hoW) {
        payInfo.push_back(data);
    }
    inFile.close(); // 手动关闭文件,也可以依赖析构函数自动关闭

    // 打开输出文件,同样检查状态
    ofstream outFile("payments1.txt");
    if (!outFile.is_open()) {
        cerr << "Error: 无法创建/打开payments1.txt文件!" << endl;
        return 1;
    }

    // 将vector中的数据写入输出文件
    for (const auto& record : payInfo) {
        outFile << record.lastName << " " << record.firstName << " " 
                << record.hW << " " << record.hoW << endl;
        // 如果需要保留两位小数,改成:
        // outFile << fixed << setprecision(2) << record.hW << " " << record.hoW << endl;
    }
    outFile.close();

    cout << "数据读写完成!共处理了" << payInfo.size() << "条记录。" << endl;
    return 0;
}

额外提示

  • 确保hours1.txt的格式和读取逻辑匹配:比如每行是姓 名 两个浮点数,用空格分隔。如果是逗号分隔或其他格式,要调整读取方式。
  • 建议用std::string代替char[],更安全省心,比如把结构体改成string lastName; string firstName;,就不用操心数组长度的问题了。

内容的提问来源于stack exchange,提问作者Erik Jackson

火山引擎 最新活动