C++程序 获取目录中文件列表的程序
在C++编程中,经常需要读取一个目录中的所有文件,以便进行进一步的处理。本文将介绍一种获取目录中文件列表的方法,既可以在Windows系统下运行,也可以在Linux系统下运行。
Windows系统下的实现
下面是一个简单的示例代码,可以在Windows系统下运行,用于获取目录中的文件列表:
“` c++
#include
#include
#include
#include
int _tmain(int argc, _TCHAR* argv[])
{
WIN32_FIND_DATA ffd;
TCHAR szDir[MAX_PATH];
HANDLE hFind = INVALID_HANDLE_VALUE;
DWORD dwError = 0;
//获取当前目录,也可以指定其他目录
GetCurrentDirectory(MAX_PATH, szDir);
//在目录后面加上通配符"*",以便获取所有文件
_tcscat_s(szDir, MAX_PATH, "\\*");
//查找匹配的第一个文件
hFind = FindFirstFile(szDir, &ffd);
if (INVALID_HANDLE_VALUE == hFind)
{
printf("无法打开目录\n");
return 0;
}
//枚举目录中的所有文件
do
{
if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
//忽略子目录
}
else
{
_tprintf(TEXT("%s\n"), ffd.cFileName);
}
} while (FindNextFile(hFind, &ffd) != 0);
dwError = GetLastError();
if (dwError != ERROR_NO_MORE_FILES)
{
printf("发生错误: %d\n", dwError);
}
//清理
FindClose(hFind);
return 0;
}
在上面的代码中,使用了`FindFirstFile`、`FindNextFile`和`FindClose`三个函数,它们都是Windows API中的函数,用于查找目录中符合指定条件的文件。其中,`FindFirstFile`用于查找匹配的第一个文件,`FindNextFile`用于查找下一个匹配的文件,`FindClose`用于释放资源。在获取到每一个文件后,通过判断文件属性来忽略掉子目录,最终将文件名输出到控制台。
## Linux系统下的实现
下面是一个简单的示例代码,可以在Linux系统下运行,用于获取目录中的文件列表:
``` c++
#include <iostream>
#include <dirent.h>
int main(int argc, char** argv)
{
DIR* pDir;
struct dirent* pDirent;
//获取当前目录,也可以指定其他目录
pDir = opendir(".");
if (pDir == NULL)
{
printf("无法打开目录\n");
return 0;
}
//枚举目录中的所有文件
while ((pDirent = readdir(pDir)) != NULL)
{
if (pDirent->d_type == DT_DIR)
{
//忽略子目录
}
else
{
std::cout << pDirent->d_name << std::endl;
}
}
//清理
closedir(pDir);
return 0;
}
</code></pre>
在上面的代码中,使用了<code>opendir</code>、<code>readdir</code>和<code>closedir</code>三个函数,它们都是Linux系统中的函数,用于查找目录中符合指定条件的文件。其中,<code>opendir</code>用于打开目录,返回一个指向DIR结构的指针;<code>readdir</code>用于读取目录中的下一个文件,返回一个指向dirent结构的指针;<code>closedir</code>用于关闭目录,释放资源。在获取到每一个文件后,通过判断文件类型来忽略掉子目录,最终将文件名输出到控制台。
<h2>结论</h2>
通过以上示例代码,我们可以看到,在C++编程中,获取目录中文件列表是非常容易实现的。无论是在Windows系统下还是Linux系统下,都可以用类似的方法来实现。使用Windows API函数或Linux系统函数可以完成这项任务,但Linux系统下有更简洁的实现方式,这就是使用boost库。boost库作为一个优秀的C++开源库,提供了很多跨平台、高效、可靠的程序库和工具函数。
在Linux系统下使用boost库可以更加方便的实现获取目录中文件列表的功能。示例代码如下:
``` c++
#include
#include
using namespace boost::filesystem;
int main(int argc, char** argv)
{
path p(".");
//枚举目录中的所有文件
for (auto& entry : directory_iterator(p))
{
if (is_directory(entry.path()))
{
//忽略子目录
}
else
{
std::cout << entry.path().filename() << std::endl;
}
}
return 0;
}
```
在上面的代码中,使用了directory_iterator
和is_directory
两个函数,它们都是boost库中的函数,用于查找目录中符合指定条件的文件。其中,directory_iterator
用于枚举目录中的所有文件,返回一个迭代器对象;is_directory
用于判断是否为子目录,返回一个bool类型值。同样的,在获取到每一个文件后,通过判断文件类型来忽略掉子目录,最终将文件名输出到控制台。
总结来说,无论是使用Windows API函数、Linux系统函数还是boost库,我们都可以通过不同的方法来实现获取目录中文件列表的功能。这些代码示例为我们提供了多种参考,可以根据不同的需求和开发平台,选择最适合自己的方法来完成任务。