我在调用std :: getline时出现错误,调试器在fstream函数中显示中断""虚拟空__CLR_OR_THIS_CALL _Lock()"" "
这是我的代码(读取文件功能):
string GetFile(const string& fileName)
{
string line;
string output;
ifstream myfile (fileName);
myfile.open(fileName);//.c_str());
if (myfile.is_open())
{
while ( getline (myfile,line) )
{
//cout << line << '\n';
output.append(line + "\n");
}
myfile.close();
} else cout << "Unable to open file";
return output;
}
(添加)
休息信息:
Engine.exe中0x7787FC47(ntdll.dll)的未处理异常:0xC0000005:访问冲突写入位置0x00000014。
并且fstream中的中断显示了这个功能:
virtual void __CLR_OR_THIS_CALL _Lock()
{ // lock file instead of stream buffer
if (_Myfile)
_CSTD _lock_file(_Myfile);
}
我不知道是什么问题
答案 0 :(得分:0)
这不是一个答案,但它是一个开始。我已经创建了一个新项目并使用了这个代码(总是这样):
#define Dir "C:\\difuseVS.txt"
using namespace std;
string GetFile(const string& fileName)
{
string line;
string output;
ifstream myfile(fileName);
if (myfile)
{
while ( getline (myfile,line) )
{
//cout << line << '\n';
output.append(line + "\n");
}
myfile.close();
}else cout << "Unable to open file";
return output;
}
int main()
{
cout << GetFile(Dir);
getchar();
}
它完美无缺!!问题出在项目配置中,但我不知道究竟在哪里
答案 1 :(得分:0)
陷入同样的问题,我发现这个链接给了我一些线索。 http://www.heapoverflow.me/question-fstream-included-but-ifstream-not-found-and-identifier-is-undefined-26761708
对于我的env(vs2010),我刚刚将msvcrtd.lib添加到我的Project Property-&gt; Linker-&gt; Input-&gt;其他依赖项并且头痛不见了,因为我的运行时库是多线程DLL(/ MD) )已经,如果没有那么可能还需要设置它
答案 2 :(得分:0)
构造函数:
ifstream myfile (fileName);
打开文件。然后:
myfile.open(fileName);
应该失败;请参阅ifstream::open - C++ Reference,其中说“如果流已经与文件关联(即,它已经打开),则调用此函数将失败”。当然,似乎“myfile.is_open()”应该返回FALSE。由于这是一个古老的问题,我认为不值得进一步追求,但也许这将有助于将来遇到同样问题的人。