打开文件名,其中文件名是存储的变量

时间:2017-07-19 13:49:48

标签: c++ input stream

我有一个类,我存储了用户提供的文件名:

string EMNfn;               // IDF file EMN name

// IDF file EMN name
void CcaAna::put_EMNfn(string s)
{
    CcaAna::EMNfn = s;
}

string CcaAna::get_EMNfn()
{
    return EMNfn;
}

但是,当我尝试打开该文件时,我知道它存在于我使用的当前目录中,并具有以下内容:

femn.open(cCCA.get_EMNfn());

我得到编译错误C2664 ...无法从'class std :: basic_string,class std :: allocator>'转换参数1 'const char *'

当我尝试使用时:

femn.open(cCCA.get_EMNfn().c_str());

它编译但跳过我的错误代码:

if(!femn)
{
    cout << "Open of Original EMN file failed\n";
    cout << "EMN file: " << cCCA.get_EMNfn() << endl;
    cout << "Press any key to exit" << endl;
    ch = getchar();
    return 1;
}

然而,当我直接输入它时,工作正常:

femn.open("262-003841-7-23.emn");

没有想法是否有另一种打开流的方式?

molbdnilo - 我认为你有所作为(见下文)

好的我之后添加了两条COUT线,并且我在代码下方包含了OUTPUT:

cout << "EMN file: " << cCCA.get_EMNfn() << endl;
//  THIS WORKS
//  femn.open("262-003841-7-23.emn");
    femn.open(cCCA.get_EMNfn().c_str());
//  femn.open(cCCA.get_EMNfn());

cout << "this works: " << "262-003841-7-23.emn" << endl;
cout << "*****" << cCCA.get_EMNfn() << "*****" << endl;

输出:
处理用户输入文件...
EMN文件:“262-003841-7-23.emn”
这项工作:262-003841-7-23.emn
***** “262-003841-7-23.emn” *****
打开原始EMN文件失败
EMN文件:“262-003841-7-23.emn”
按任意键退出

我所看到的是存储的字符串“围绕它。是否有C ++方法来删除它们?

1 个答案:

答案 0 :(得分:-1)

您没有正确分配字符串!不应使用=运算符分配字符串变量。 Here是使用字符串的参考。

这里有很多方法可以完成你的任务:

#include <string.h> ... strcpy(CcaAna::EMNfn,s);//instead of CcaAna::EMNfn=s;

也许这可能有用,如果不检查链接并使用正确的方法来处理字符串。

欢呼