用C ++读取流

时间:2010-03-22 18:45:04

标签: c++

我有以下代码:

    ifstream initFile;
    initFile.open("D:\\InitTLM.csv");
    if(initFile.is_open())
    {

      // Process file

    }

文件未打开。该文件确实存在于D:驱动器上。有没有办法找出无法找到此文件的原因?就像一个“错误”?

4 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

您应该能够使用操作系统的底层错误报告机制来获取原因(因为标准库是基于OS原语构建的)。该代码不是可移植的,但它可以帮助您解决问题的根源。

由于您似乎在使用Windows,因此您可以使用GetLastError获取原始代码,并使用FormatMessage将其转换为文字说明。

答案 2 :(得分:0)

STL不善于报告错误。这是您在标准范围内可以做的最好的事情:

  ifstream initFile;
  initFile.exceptions(ifstream::eofbit|ifstream::failbit|ifstream::badbit);
  try
    { 
      initFile.open("D:\\InitTLM.csv");
      // Process File
    }
  catch(ifstream::failure e) 
    {
      cout << "Exception opening file:" << e.what() << endl;
    }

根据我的经验,what()返回的消息通常是无用的。

答案 3 :(得分:0)

检查D:驱动器根目录的权限。您可能会发现已编译的可执行文件或运行调试程序的服务没有足够的访问权限来打开该文件。

尝试暂时将D:\ root目录的权限更改为“Everyone - &gt; Full Control”,并查看是否可以解决问题。