在Visual Studio 2010或2008中的<dirent.h>

46

我想在我的代码中使用 #include <dirent.h>,但出现了以下错误:

无法打开包括文件: 'dirent.h': 没有那个文件或目录

我该如何解决这个问题?


1
它过于紧密地绑定到*nix。在Windows中,使用_findfirst/_findnext来迭代目录,#include <io.h> - Hans Passant
2个回答

69
因为这个头文件不随 MSVC 附带。所以它找不到它!
它随着 C POSIX 库一起提供。wikipedia 上说,
dirent.h 已知被包含在以下编译器中:
- Turbo C++ (DOS) - GCC (跨平台) - MinGW (Microsoft Windows) - Borland C++ Builder (Microsoft Windows)
Microsoft Visual C++ 不包括 dirent.h。
然而,你可以下载 免费的 Windows 实现 dirent.h,你可以用它来和 Microsoft Visual Studio 一起使用。

我该如何在Visual Studio中使用它? - amiref
1
最新的针对Windows的dirent版本(2012年4月)存在漏洞,我现在正在使用第一个版本(2006年版)。 第一个版本的来源:https://svn.apache.org/repos/asf/avro/trunk/lang/c/tests/msdirent.h - anilbey
链接似乎已经损坏。 - gnovice
2
这是从原始网页链接的GitHub存储库:https://github.com/tronkko/dirent - AeroX
3
该怨恨微软! - user2356685

0

这是另一个适用于Windows的轻量级dirent.h实现。它只有两个文件,您可以直接使用。

目前,在Windows上获得完整的POSIX支持的最佳方法可能是Cygwin或其类似产品

虽然有Windows Services for UNIX(SfU),但根据一些人的说法,它在2006年时与Cygwin非常接近。考虑到Cygwin及其某些同行仍然活跃,并且SfU已经半个多十年没有更新了,我每天都会选择前者。

如果你对过去的事情感兴趣,可以看看微软官方的《如何从UNIX迁移到Windows》网站(这个小宝藏来自2006年)。看起来似乎没什么用处,但很有趣,可以了解一下微软在2006年认为什么是“有用”的。

在你推荐的代码中,struct dirent并没有定义目录条目的内容。对于大多数应用程序来说是无用的。 - Jay
@Jay 很好的观点。自从我上次发帖以来,情况已经发生了变化。现在,WSL似乎是最佳解决方案。但根据微软最近的公告,我们可以假设新的Windows将允许更好的集成(或者他们承诺会这样做... :/)。 - Domi

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