在C++中读取流

3

I have the following code:

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

      // Process file

    }

文件无法打开。该文件确实存在于D:驱动器上。是否有找出为何找不到此文件的确切原因的方法?就像“errno”一样?


1
你能否先尝试将 InitTLM.csv 放置于程序目录中,并执行 initfile.open("inittlm.csv");,而非引用驱动器号。然后请告知我们是否还存在错误。 - JonH
1
请勿使用 '' 作为分隔符,因为它是转义字符,会增加代码的不透明度。你是指 '\' 还是 '\\'?自 Windows XL 起,Windows 已接受 '/' 作为目录分隔符。使用它可以消除我们不需要回答的疑问层。 - Martin York
4个回答

1

1

你应该能够使用操作系统的底层错误报告机制来获取原因(因为标准库是建立在操作系统原语之上的)。代码可能不具备可移植性,但它应该能帮助你找到问题的根源。

由于你似乎正在使用Windows,你可以使用GetLastError来获取原始代码,使用FormatMessage将其转换为文本描述。


0
STL 在报告错误方面做得不太好。以下是您可以在标准范围内做的最好的事情:
ifstream initFile; initFile.exceptions(ifstream::eofbit|ifstream::failbit|ifstream::badbit); try { initFile.open("D:\\InitTLM.csv"); // 处理文件 } catch(ifstream::failure e) { cout << "Exception opening file:" << e.what() << endl; }
根据我的经验,what() 返回的消息通常是无用的。

0

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

尝试暂时更改D:\根目录的权限为“每个人->完全控制”,看看是否解决了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接