使用用户生成的文件名创建ifstream?

时间:2012-07-05 20:50:31

标签: c++ fstream ifstream

我在创建带有文件名的ifstream时遇到问题,该文件名未在编译时定义。以下示例正常工作:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {
    string file, word;
    int count = 0;

    cout << "Enter filename: ";
    cin >> file;
    ifstream in("thisFile.cpp");
    while(in >> word)
        count++;
    cout << "That file has " << count << " whitespace delimited words." << endl;

}

但如果我将行ifstream in("thisFile.cpp");更改为ifstream in(file);,我会收到编译错误。这是为什么?

3 个答案:

答案 0 :(得分:4)

C ++ 98中的文件流只为构造函数参数采用C风格的字符串,而不是C ++字符串,这是C ++ 98标准中的疏忽,在C ++ 11更新中得到了纠正。如果你的编译器还不支持C ++ 11,你可以通过调用c_str()从字符串名称打开一个文件来从C ++字符串中获取C风格的字符指针:

ifstream in(file.c_str());

答案 1 :(得分:3)

在c ++ 11之前,ifstream构造函数只为const char*取了一个字符串作为文件名。

所以请尝试ifstream in(file.c_str());

答案 2 :(得分:2)

您需要c_str方法:

ifstream in(file.c_str());