创建一个C++;包含目录中的文件名的容器 我需要在C++中的目录中生成文件名容器,并且它必须是跨平台兼容的。有人建议使用WIN32\u FIND\u DATA数据结构。这是最好的选择吗?如果是,我将如何实施 用户不会输入文件名,而是C++函数会自动搜索目录并创建文件名容器。我也不知道如何读入这样的文件名

创建一个C++;包含目录中的文件名的容器 我需要在C++中的目录中生成文件名容器,并且它必须是跨平台兼容的。有人建议使用WIN32\u FIND\u DATA数据结构。这是最好的选择吗?如果是,我将如何实施 用户不会输入文件名,而是C++函数会自动搜索目录并创建文件名容器。我也不知道如何读入这样的文件名,c++,directory,containers,filenames,C++,Directory,Containers,Filenames,我也非常关注标准,所以不是一个理想的解决方案,因为它不是ISO C标准,即使它是C POSIX库中的一个标题 我猜WIN32_FIND_数据不是跨平台的最佳选择,但可能有一些库可以帮助您在linux上提供它 考虑使用将文件转储到一个文件夹中 类似这样的内容(改编自): void show_文件(常量路径和目录) { 如果(!exists(directory))返回; 目录迭代器端; for(目录迭代器iter(目录);iter!=end;++iter) 如果(is_目录(*iter))继续;//

我也非常关注标准,所以
不是一个理想的解决方案,因为它不是ISO C标准,即使它是C POSIX库中的一个标题

我猜WIN32_FIND_数据不是跨平台的最佳选择,但可能有一些库可以帮助您在linux上提供它

考虑使用将文件转储到一个文件夹中

类似这样的内容(改编自):

void show_文件(常量路径和目录)
{
如果(!exists(directory))返回;
目录迭代器端;
for(目录迭代器iter(目录);iter!=end;++iter)
如果(is_目录(*iter))继续;//跳过目录

cout我猜WIN32_FIND_数据并不是跨平台的最佳选择,但可能有一些库可以帮助在linux上提供它

考虑使用将文件转储到一个文件夹中

类似这样的内容(改编自):

void show_文件(常量路径和目录)
{
如果(!exists(directory))返回;
目录迭代器端;
for(目录迭代器iter(目录);iter!=end;++iter)
如果(is_目录(*iter))继续;//跳过目录

嗯,我不认为Win32的任何功能都是跨平台的。如果你只需要存储目录名,你不能只使用数组或向量吗?

嗯,我不认为Win32的任何功能都是跨平台的。如果你只需要存储目录名,你不能只使用数组或向量吗?

我会使用。未测试:

#include "boost/filesystem.hpp"
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>

namespace bf = boost::filesystem;
typedef std::vector<bf::path> path_container;

path_container enumerate_files(const bf::path& pDirectory)
{
    path_container result;

    if (!bf::exists(pDirectory))
        return result;

    bf::directory_iterator iter(pDirectory);
    bf::directory_iterator last;

    for (; iter != last; ++iter)
        if (bf::is_regular_file(iter->status()))
            result.push_back(iter->path());

    return result;
}

int main(void)
{
    path_container c = enumerate_files("./");

    std::copy(c.begin(), c.end(),
        std::ostream_iterator<bf::path>(std::cout, "\n"));
}
#包括“boost/filesystem.hpp”
#包括
#包括
#包括
#包括
名称空间bf=boost::filesystem;
typedef std::向量路径_容器;
path_容器枚举_文件(const bf::path&pDirectory)
{
路径_容器结果;
如果(!bf::存在(pDirectory))
返回结果;
目录迭代器iter(pddirectory);
bf::目录\迭代器last;
对于(;iter!=最后;++iter)
if(bf::is_regular_file(iter->status()))
结果:推回(iter->path());
返回结果;
}
内部主(空)
{
路径_容器c=枚举_文件(“./”);
std::copy(c.begin(),c.end(),
std::ostream_迭代器(std::cout,“\n”);
}
我会使用。未经测试:

#include "boost/filesystem.hpp"
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>

namespace bf = boost::filesystem;
typedef std::vector<bf::path> path_container;

path_container enumerate_files(const bf::path& pDirectory)
{
    path_container result;

    if (!bf::exists(pDirectory))
        return result;

    bf::directory_iterator iter(pDirectory);
    bf::directory_iterator last;

    for (; iter != last; ++iter)
        if (bf::is_regular_file(iter->status()))
            result.push_back(iter->path());

    return result;
}

int main(void)
{
    path_container c = enumerate_files("./");

    std::copy(c.begin(), c.end(),
        std::ostream_iterator<bf::path>(std::cout, "\n"));
}
#包括“boost/filesystem.hpp”
#包括
#包括
#包括
#包括
名称空间bf=boost::filesystem;
typedef std::向量路径_容器;
path_容器枚举_文件(const bf::path&pDirectory)
{
路径_容器结果;
如果(!bf::存在(pDirectory))
返回结果;
目录迭代器iter(pddirectory);
bf::目录\迭代器last;
对于(;iter!=最后;++iter)
if(bf::is_regular_file(iter->status()))
结果:推回(iter->path());
返回结果;
}
内部主(空)
{
路径_容器c=枚举_文件(“./”);
std::copy(c.begin(),c.end(),
std::ostream_迭代器(std::cout,“\n”);
}

C和C++标准都没有目录的任何东西。你必须使用其他标准,比如POSIX,来处理它们。C和C++标准都没有目录。你必须使用其他标准,比如POSIX,来处理它们。<代码> Boo::文件系统< /代码>强烈推荐:被C++标准委员会接受为Tr2的一部分,因此它最终将被内置到大多数编译器(在<>代码> STD::Tr2::Sys)中。强烈建议:文件系统< /代码>:它被C++标准委员会接受为Tr2的一部分,因此它最终将被编译成大多数编译器。(在
std::tr2::sys下)。