我正在尝试创建一个随机选择给定基本路径的文件夹的程序,然后在新文件夹中随机选择要打开的视频并开始播放。
我的主要问题是查找给定路径中的文件数。有没有可以做类似的功能?还是类似的? 我需要什么样的标题?等。
随机部分很容易。在解决了这个问题后,我想知道我是否能够在执行程序时启动视频,这应该是我程序的最后一步。
在发布之前我已经搜索了很多,我知道你可能认为它已经存在了,但我找不到足够的东西来满足我想要的东西。
我希望你能帮助我。
答案 0 :(得分:2)
你应该研究boost.filesystem。没有boost的C ++(或其他库集,如Qt)的功能非常有限。
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
内部&#34;用于&#34;循环:
#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";
}
}
答案 1 :(得分: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 :(得分:0)
我的主要问题是找到给定路径中的文件数。
虽然函数glob called is C,如果您的C ++编译器与C兼容,它不应该成为问题。您可以始终将其包装在C ++中:) Man glob描述了如何使用它。 GLOB_ONLYDIR
允许您将结果限制为目录。
播放视频的最简单方法是致电system()
并在您喜爱的播放器中执行视频