2015-06-14 33 views
1

我想创建一个程序,随机选择一个文件夹给定一个基本路径,然后在新文件夹中随机选择要打开的视频并开始播放。在C++中给出一个路径的文件列表

我的主要问题是找到给定路径内的文件数量。有什么功能可以做这样的事吗?还是类似? 我需要什么样的标题?

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

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

我希望你能帮助我。

+0

执行视频和你为什么选择C++? – teivaz

+0

你正在使用哪个操作系统?另外,请张贴您尝试过的代码以与文件系统进行交互。 –

+0

[使用C++的目录中的文件数]可能的重复(http://stackoverflow.com/questions/2802188/file-count-in-a-directory-using-c) – smac89

回答

0

您显然需要修改此功能以使其适用于您。但这是我能够找到并做出的功能。我认为它需要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); 
     } 
    } 
2

你应该看看boost.filesystem。没有提升的C++(或另一个库集,如Qt)的能力非常有限。

an example in doc

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 directory\n"; 
    } 
    else 
     cout << p << " does not exist\n"; 
    } 

    catch (const filesystem_error& ex) 
    { 
    cout << ex.what() << '\n'; 
    } 

    return 0; 
} 

当然你也可以使用directory_iterator里面的 “for” 循环:

#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"; 
    } 
} 
0

我的主要问题是找到一个路径中的文件的数量给予。

虽然功能glob called is C,它不应该是一个问题,如果你的C++编译器与C.兼容您可以随时将它包装在C++ :) Man glob介绍如何使用它。 GLOB_ONLYDIR可让您将结果限制到目录。

播放视频的最简单方法是调用system()和你最喜欢的球员

相关问题