打开名称中包含空格的文件

时间:2012-09-25 04:48:56

标签: c++ string stream long-filenames

我在使用名称中包含空格的C ++中打开文件时遇到问题。例如,要打开文件read me.txt

这是我到目前为止的代码,它涉及一个读取文件并将字数输出到控制台的命令:

string choice, word, fname;
ifstream input;
int l, count = 0;

if(choice == "wc" || choice == "WC" || choice == "Wc")
{
    getline(cin, fname);
    input.open(fname.c_str());
    cout << fname << endl;
    if(input.fail())
    {
        cerr << " Error: failed to open the file: " << fname << endl;
        input.clear();
    }
    else
    {
        w = 0;
        while (input >> word)
           w++;
        input.close();
        count = w;
        cout << fname << " has a Word Count of: " << count << " words \n" << endl;
    }
}

我知道流函数c_str()在空格后不能读取多个字符串。我在考虑使用子字符串,但我不完全确定如何继续。你能帮助我吗?

1 个答案:

答案 0 :(得分:0)

你试过这个(http://www.cplusplus.com/forum/beginner/39687/):

在文字字符串中,'\'字符被解释为转义码,以允许您嵌入无法输入或不可打印的字符。例如,要在文字字符串中嵌入换行符,您不能在键入文字字符串时按Enter键,因为编辑器会通过实际开始新行来响应。所以你输入“\ n”,即“这是在第一行\ n这是在第二行”。要输入'\'字符,您需要输入两个斜杠来逃避它。第一个斜杠是转义字符,第二个斜杠是嵌入的斜杠字符。

示例:C:\ Program Files \ filename.txt

编辑: 用户不会仅输入转义字符文件名。然后程序必须处理空格和反斜杠的路径。 \ n指定新行,但它由转义字符后跟n字符组成。