std :: getline函数出错(fstreeam _Lock())

时间:2014-08-24 22:28:46

标签: c++ file locking getline

我在调用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);
    }

我不知道是什么问题

3 个答案:

答案 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。由于这是一个古老的问题,我认为不值得进一步追求,但也许这将有助于将来遇到同样问题的人。