C++; 如何在Windows上使用C++在给定目录中获取所有文件?

C++; 如何在Windows上使用C++在给定目录中获取所有文件?,c++,windows,file,directory,C++,Windows,File,Directory,注: 我找到了使用dirent.h的方法,但我需要一种更标准的方法 谢谢您必须使用FindFirstFile函数()。这是Windows中的标准(也是首选)方式,但它不可移植。您找到的标题dirent.h包含函数的定义 有关完整代码,请参见此示例:使用和相关函数。例如: HANDLE hFind; WIN32_FIND_DATA data; hFind = FindFirstFile("c:\\*.*", &data); if (hFind != INVALID_HANDLE_VALU

注:
我找到了使用
dirent.h
的方法,但我需要一种更标准的方法


谢谢

您必须使用
FindFirstFile
函数()。这是Windows中的标准(也是首选)方式,但它不可移植。您找到的标题
dirent.h
包含函数的定义

有关完整代码,请参见此示例:

使用和相关函数。例如:

HANDLE hFind;
WIN32_FIND_DATA data;

hFind = FindFirstFile("c:\\*.*", &data);
if (hFind != INVALID_HANDLE_VALUE) {
  do {
    printf("%s\n", data.cFileName);
  } while (FindNextFile(hFind, &data));
  FindClose(hFind);
}

boost库呢:文件系统。

< P> C++中所接受的标准在ISO/IEC TS 18822:2015中描述,最新草案是。您的编译器可能还没有,在这种情况下提供的基本相同。

实际上,dirent.h中的函数是更标准的(POSIX)方式。但是该文件不包含在VC++中2008@Neil:POSIX不是标准库的一部分,并且最常用的操作系统中最常用的C/C++编译器(MSVC)也不支持它(窗口)@Lorenzo POSIX是标准的,Windows不是。但是从你在这里的其他帖子来看,我认为争论这一点没有多大意义。POSIX是否比Windows更标准完全无关。最初的问题显然与Windows有关,因此谈论
dirent.h
毫无意义,也没有任何帮助。+1 fo您可能想链接到文件系统文档:这取决于“标准”一词的定义如果您只接受ISO标准,那么根本就没有标准方法。
FindFirstFile
是公认的用于列出目录项的操作系统接口,而Boost.Filesystem只是Windows上此接口的包装器。两者都是事实上的标准。Windows上的标准是尽可能远离Win32 API。如果Boost提供了一个明智的选择,这就是许多C++开发者的反应是跳过它。@ Philipp:但是用户在Windows中询问了标准的方式。@洛伦佐:正如我所说,这取决于你对“标准”的意思。API解决方案很好:易于使用,灵活,不引入额外的依赖项。但它没有标准化,因为有ISO标准。@Lorenzo:casablanca使用的那个,MSDN库称为“ANSI”(术语“8位”在技术上是正确的,但似乎是我专用的)。包含它只是为了与Windows 9x兼容。本机API是UTF-16。要使用它,请在任何地方定义
UNICODE
,并用通用宏(
\u tprintf
)或UTF-16函数(
\u wprintf
)替换8位函数,如
printf
),然后使用“wide”带有
L
前缀或
TEXT
宏的字符串常量。有关更好的示例,请参阅您自己的帖子(仍然没有
UNICODE
,因为这应该通过编译器开关定义)。@Philipp:现在更有意义了,但如果您说“8位API”,它将很难被解释为“非UNICODE API”.在我看来,它不应该得到-1,因为没有必要为添加文本()的示例增加复杂性宏和函数。@Philipp:这是一个列出文件的例子,而不是关于文本输出,
printf
在这里很好地发挥了作用。我甚至可以使用
MessageBox
而不是
printf
,但这不是重点。@casablanca:是的,这不是关于文本输出,但已经有很多这样的例子了至少,不必要地使用过时的API,而不需要另一个。@Lorenzo:如果不需要,您不必添加
文本
宏,您可以使用宽字符串(
L“…
)。但是您必须在Windows上执行其中一个操作,否则您的程序会崩溃。@Philipp:您把
UNICODE
弄糊涂了(选择Win32 API,如
FindFirstFileA/W
)和
\U UNICODE
(选择MS CRT API,如
printf
/
wprintf