我正在尝试创建一个程序,该程序在给定基本路径的情况下随机选择一个文件夹,然后在新文件夹中随机选择要打开的视频并开始播放。
我的主要问题是在给定的路径中查找文件的数量。有没有功能可以做这样的事情?还是类似的?我需要什么样的标头?等。。
随机部分很容易。解决此问题后,我想知道我是否能够在执行程序时启动视频,这应该是程序的最后一步。
在发布之前我已经搜索了很多,我知道您可能认为它已经在那里,但我无法找到足够具体的东西来满足我想要的东西。
我希望你能帮助我。
你应该看看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()
并在您喜欢的播放器中执行视频