在C++中给定路径的文件列表



我正在尝试创建一个程序,该程序在给定基本路径的情况下随机选择一个文件夹,然后在新文件夹中随机选择要打开的视频并开始播放。

我的主要问题是在给定的路径中查找文件的数量。有没有功能可以做这样的事情?还是类似的?我需要什么样的标头?等。。

随机部分很容易。解决此问题后,我想知道我是否能够在执行程序时启动视频,这应该是程序的最后一步。

在发布之前我已经搜索了很多,我知道您可能认为它已经在那里,但我无法找到足够具体的东西来满足我想要的东西。

我希望你能帮助我。

你应该看看boost.filesystem。没有 boost(或其他库集,如 Qt)的C++功能非常有限。

文档中有一个例子:

int main(int argc, char* argv[])
{
  path p (argv[1]);   // p reads clearer than argv[1] in the following code
  try
  {
    if (exists(p))    // does p actually exist?
    {
      if (is_regular_file(p))        // is p a regular file?   
        cout << p << " size is " << file_size(p) << 'n';
      else if (is_directory(p))      // is p a directory?
      {
        cout << p << " is a directory containing:n";
        copy(directory_iterator(p), directory_iterator(), // directory_iterator::value_type
          ostream_iterator<directory_entry>(cout, "n")); // is directory_entry, which is
                                                          // converted to a path by the
                                                          // path stream inserter
      }
      else
        cout << p << " exists, but is neither a regular file nor a directoryn";
    }
    else
      cout << p << " does not existn";
  }
  catch (const filesystem_error& ex)
  {
    cout << ex.what() << 'n';
  }
  return 0;
}

当然,您可以使用"for"循环中的directory_iterator

#include <boost/filesystem.hpp>
#include <boost/range/iterator_range.hpp>
#include <iostream>
using namespace boost::filesystem;
int main(int argc, char *argv[])
{
    path p(argc > 1? argv[1] : ".");
    if(is_directory(p)) {
        std::cout << p << " is a directory containing:n";
        for(auto& entry : boost::make_iterator_range(directory_iterator(p), {}))
            std::cout << entry << "n";
    }
}

您显然需要修改此函数以使其适合您。但这是我能够找到并制作的功能。我认为它需要Windows.h。它的作用是将Bin/Pictures中所有文件的文件名添加到名为mTextureNames的向量中。

 void Editor::LoadTextureFileNames()
    {   
        string folder = "../Bin/Pictures/";
        char search_path[200];
        sprintf(search_path, "%s*.*", folder.c_str());
        WIN32_FIND_DATA fd; 
        HANDLE hFind = ::FindFirstFile(search_path, &fd); 
        if(hFind != INVALID_HANDLE_VALUE) { 
            do { 
                // read all (real) files in current folder
                // , delete '!' read other 2 default folder . and ..
                if(! (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ) {
                    this->mTextureNames.push_back(fd.cFileName);
                }
            }while(::FindNextFile(hFind, &fd)); 
            ::FindClose(hFind); 
        } 
    }

我的主要问题是在给定的路径中查找文件的数量。

虽然调用的函数 glob 是 C,但如果你的 C++ 编译器与 C 兼容,这应该不是问题。您可以随时将其包装在C++ :)男人 glob 描述了如何使用它。该GLOB_ONLYDIR允许您将结果限制为目录。

播放视频的最简单方法是调用system()并在您喜欢的播放器中执行视频

相关内容

  • 没有找到相关文章