读取文件夹中文件所有文件名

时间:2023-01-25 12:29:53

来源:opencv中samples\cpp\latentsvm_multidetect.cpp

static void readDirectory( const string& directoryName, vector<string>& filenames, bool addDirectoryName=true )
{
filenames.clear();

#if defined(WIN32) | defined(_WIN32)
struct _finddata_t s_file;
string str = directoryName + "\\*.*";

intptr_t h_file = _findfirst( str.c_str(), &s_file );
if( h_file != static_cast<intptr_t>(-1.0) )
{
do
{
if( addDirectoryName )
filenames.push_back(directoryName + "\\" + s_file.name);
else
filenames.push_back((string)s_file.name);
}
while( _findnext( h_file, &s_file ) == 0 );
}
_findclose( h_file );
#else
DIR* dir = opendir( directoryName.c_str() );
if( dir != NULL )
{
struct dirent* dent;
while( (dent = readdir(dir)) != NULL )
{
if( addDirectoryName )
filenames.push_back( directoryName + "/" + string(dent->d_name) );
else
filenames.push_back( string(dent->d_name) );
}

closedir( dir );
}
#endif

sort( filenames.begin(), filenames.end() );
}

同样在opencv中还有另外一个读取文件夹中所有文件,或者所有文件夹,或者所有文件夹,或者所有文件名和所有文件夹名的部分,由于代码比较多,在这里就不一一列出来,只给出位置(我使用的是opencv2.4.8):
头文件在contrib.hpp头文件中,而实现在contrib下的src下的inputoutput.cpp中,这里给出另一个网站的使用例程:
http://blog.csdn.net/fengbingchun/article/details/42435901

另外,在windows下可以使用system来获取文件夹下所有文件的名称,比如在windows下可以通过命令行:

dir/b >list.txt

将当前目录下的所有文件名写到文件list.txt中去,在这里可以在代码中用

system("dir/b >list.txt");

来实现,这里与上面的区别是这里只能将文件名写到文件下,而不能实时获取。
同理,这里也提供了一种在代码中执行命令行命令的方法,这就是直接用system就可以了。
下面列出dir的一些常见命令参数:
cd功能:改变当前操作目录。

cd 文件夹名字 如:cd windows 进入根目录下的windows目录

dir功能:列出磁盘上所有的或指定的文件目录。显示内容包含卷标、文件名、文件大小、文件建立日期和时间、目录名、磁盘剩余空间等。

格式:DIR [盘符][路径][文件名][/P][/W][/S][/B][/A]

参数说明:

/P:当显示的信息超过一屏时暂停显示,直至按任意键才继续显示

/W:以横向排列的形式显示文件名和目录名,每行5个(不显示文件大小、建立日期和时间)

/S:列出指定目录及其子目录中的所有内容(但不包括系统文件和隐含文件)

/B:仅列出文件名称,而不列出日期、大小等信息

/A:显示包括系统文件和隐含文件

以输出本人电脑F盘“ok”目录下所有文件夹及文件名到文本文档的操作,来示范如何批量输出指定目录下的文件(文件夹)名: 1.点击“开始”>“运行”>输入“cmd”>“确定”进入命令提示符界面 2.输入“f:”回车,切换当前目录为F盘 3.输入“cd ok”回车,切换目录为“ok”文件夹 4.输入“dir/s/b >list.txt” 回车后“F:ok”目录下就会生成一个文件名为“list”的文本文档,里面列清了所有ok文件夹下的文件夹名称及文件名称。若不需要目录中的路径,把/s去掉就行了。