为什么我的C++代码拒绝读取txt文件?

问题描述 投票:0回答:1

我已经尝试在没有帮助的情况下解决这个问题有一段时间了,但我很挣扎。有人可以解释为什么我的代码拒绝运行要求运行的行吗?

#include <iostream>
#include <string>
#include <fstream>
#include <sstream>

void fileOP(std::ifstream& testdata, std::string& line, std::string& csvitem, int linenumsought, int linenum, std::string& address);

int main() {
    std::ifstream testdata;
    testdata.open("testdata.txt");
    std::string line, csvitem;
    int linenum = 0;
    int linenumsought;
    std::string address; // Variable for later use

    std::cout << "Please enter address: ";
    std::cin >> linenumsought; // Using an int for now so I can just enter the line number

    fileOP(testdata, line, csvitem, linenumsought, linenum, address);

    return 0;
}

void fileOP(std::ifstream& testdata, std::string& line, std::string& csvitem, int linenumsought, int linenum, std::string& address) {
    if (testdata.is_open()) {
        while (std::getline(testdata, line)) {
            linenum++;
            std::cout << "Reading line " << linenum << ": " << line << std::endl; // Debugging output
            if (linenum == linenumsought) {
                std::cout << "Line number matched: " << line << std::endl; // Debugging output
                std::istringstream myline(line);
                while (std::getline(myline, csvitem, ',')) {
                    std::cout << csvitem << std::endl;
                }
            }
        }
        testdata.close(); // Close the file after reading
    } else {
        std::cerr << "Unable to open file!" << std::endl;
    }
}

我不断收到来自

std::cerr << "Unable to open file!" << std::endl;
的错误响应,并且似乎无法修复它,如果您想要更多信息,请随时询问。

c++ c++11
1个回答
0
投票

此代码的问题在于,在调用 fileOP() 函数之前,在 main() 函数中打开文件 testdata.txt。但是,文件 testdata.txt 没有作为参数传递给 fileOP() 函数。这意味着 fileOP() 函数无法处理打开的文件。

要解决此问题,您应该将 testdata 文件流作为参数传递给 fileOP() 函数。修改main()函数,将testdata文件流传递给fileOP(),解决方案如下:

int main() {
std::ifstream testdata;
testdata.open("testdata.txt");
std::string line, csvitem;
int linenum = 0;
int linenumsought;
std::string address; // Variable for later use

std::cout << "Please enter address: ";
std::cin >> linenumsought; // Using an int for now so I can just enter the line number

fileOP(testdata, line, csvitem, linenumsought, linenum, address);

testdata.close(); // Close the file after using it

return 0;

}

© www.soinside.com 2019 - 2024. All rights reserved.