我想创建一个程序,随机选择一个文件夹给定一个基本路径,然后在新文件夹中随机选择要打开的视频并开始播放。在C++中给出一个路径的文件列表
我的主要问题是找到给定路径内的文件数量。有什么功能可以做这样的事吗?还是类似? 我需要什么样的标题?
随机部分是一种容易。解决这个问题后,我想知道我是否能够在执行程序时启动视频,这应该是我程序的最后一步。
在发布之前,我已经搜索了很多,我知道你可能会认为它已经在那里,但我无法找到足够我想要的东西。
我希望你能帮助我。
我想创建一个程序,随机选择一个文件夹给定一个基本路径,然后在新文件夹中随机选择要打开的视频并开始播放。在C++中给出一个路径的文件列表
我的主要问题是找到给定路径内的文件数量。有什么功能可以做这样的事吗?还是类似? 我需要什么样的标题?
随机部分是一种容易。解决这个问题后,我想知道我是否能够在执行程序时启动视频,这应该是我程序的最后一步。
在发布之前,我已经搜索了很多,我知道你可能会认为它已经在那里,但我无法找到足够我想要的东西。
我希望你能帮助我。
您显然需要修改此功能以使其适用于您。但这是我能够找到并做出的功能。我认为它需要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);
}
}
你应该看看boost.filesystem。没有提升的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
里面的 “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";
}
}
我的主要问题是找到一个路径中的文件的数量给予。
虽然功能glob called is C,它不应该是一个问题,如果你的C++编译器与C.兼容您可以随时将它包装在C++ :) Man glob介绍如何使用它。 GLOB_ONLYDIR
可让您将结果限制到目录。
播放视频的最简单方法是调用system()
和你最喜欢的球员
执行视频和你为什么选择C++? – teivaz
你正在使用哪个操作系统?另外,请张贴您尝试过的代码以与文件系统进行交互。 –
[使用C++的目录中的文件数]可能的重复(http://stackoverflow.com/questions/2802188/file-count-in-a-directory-using-c) – smac89