gpt4 book ai didi

c++ - 在 Windows 上的目录上使用 fopen

转载 作者:可可西里 更新时间:2023-11-01 10:16:11 29 4
gpt4 key购买 nike

在将目录作为文件打开时,我试图从 errno 中获取正确的错误代码,包括使用 fopen 和 ifstream.open()。我期望 EISDIR,我得到 EACCES。

我正在 Windows 7 x64 上使用 MSVC 12.0 工具链进行编译(和执行)。

我一直在阅读文章 ( https://gehrcke.de/2011/06/reading-files-in-c-using-ifstream-dealing-correctly-with-badbit-failbit-eofbit-and-perror/),其中作者得到了输出“stream failbit(或 badbit)。错误状态:是一个目录”。

我用 GCC 4.6(或更高版本,不确定 atm)编译了作者文件,并在传递一个目录作为参数时我也得到了 EACCES。

我知道没有简单的方法可以判断磁盘对象是否是 Windows 上的目录,因此没有获得 EISDIR 也不足为奇。

有什么办法可以解决吗(就是说,在 Windows 上获取 EISDIR)?是否有其他 errno 以类似(意外)的方式运行?

最佳答案

Microsoft 的 C 运行时库定义但不使用 EISDIR 符号。所以你不会从他们那里得到那个错误代码。要获得其他问题的答案,您需要查看 C 库源代码。它随 Visual Studio 一起提供,如果是 Visual Studio 2015 及更高版本,则随附 Windows SDK。

在使用通用 CRT 的 Visual Studio 2015 (14.0) 中,您需要的文件名为 errno.cpp,它包含在 Windows SDK 中,我在 c 中有它:\Program Files (x86)\Windows Kits\10\Source\10.0.10586.0\ucrt\misc\errno.cpp

在Visual Studio 2013 (12.0) 中,你需要的文件叫做dosmap.c,它包含在Visual Studio 安装目录的VC 子目录中,我在C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\crt\src\dosmap.c.

这两个文件都包含一个错误表,将操作系统错误代码映射到 C 库错误代码。您可以使用它来确认特定映射是否符合您的预期。

关于c++ - 在 Windows 上的目录上使用 fopen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39293488/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com