【问题标题】:opening a file where the filename is a stored variable打开文件名是存储变量的文件
【发布时间】:2017-07-19 13:49:48
【问题描述】:

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

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 ...无法将参数 1 从 'class std::basic_string,class std::allocator >' 转换为 '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++ 方法来删​​除它们吗?

【问题讨论】:

  • 您确定这些字符串是相同的吗?尤其是空格很难被发现。
  • 如果您使用 IDE 或调试器启动应用程序,工作目录可能与可执行文件的位置不同。
  • 你应该学会使用references。您正在制作一大堆不必要的字符串副本。

标签: c++ input stream


【解决方案1】:

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

有很多方法可以完成你的任务,这里是其中之一:

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

如果不检查链接并使用正确的方式处理字符串,这可能会起作用。

干杯

【讨论】:

  • 这些是 C++ std::strings,而不是 C 字符串。
  • 那个链接非常好,但让我更加困惑。我所有的声明都使用 C++ 方法“字符串变量;”并且根据复制字符串的链接是C++,就像我用'='符号完成的那样。它让我相信它与我使用这种方法时得到的编译错误有关:'code' femn.open(cCCA.get_EMNfn()); 'code' 我得到一个编译错误 C2664 ...无法将参数 1 从 'class std::basic_string,class std::allocator >' 转换为 'const char *'
猜你喜欢
  • 1970-01-01
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多