序文
プロジェクト開発では、多くの場合、特定のフォルダー内のいくつかのリソース ファイルをスキャンする必要があります。車輪の再発明を避けるために、ここに記録することにしました。
実装のアイデア
1. フォルダ名を付ける
2. ファイルハンドルを取得する3.合計(上位とカレントディレクトリ)
をフィルタリングする4.構造の属性を取得してフォルダ、ファイルなどを特定する.
..
__finddata64_t
attrib
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//
// Macros
//
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// File attribute constants for the _findfirst() family of functions
#define _A_NORMAL 0x00 // Normal file - No read/write restrictions
#define _A_RDONLY 0x01 // Read only file
#define _A_HIDDEN 0x02 // Hidden file
#define _A_SYSTEM 0x04 // System file
#define _A_SUBDIR 0x10 // Subdirectory
#define _A_ARCH 0x20 // Archive file
ソースコード
開発環境が 32 ビットの場合、__finddata64_t
、_findfirst64
、_findnext64
3 を_finddata32_t
、_findfirst
、に変更する必要があります_findnext
。
std::string path = "./tset/"+ '*';
__finddata64_t fileInfo;
intptr_t hFile = _findfirst64(path.c_str(), &fileInfo);
if(-1 != hFile)
{
do
{
if(_A_SUBDIR == fileInfo.attrib && 0 != strcmp(fileInfo.name, ".") && 0 != strcmp(fileInfo.name, ".."))
{
qDebug() << QString::fromStdString(fileInfo.name);
}
}while(0 == _findnext64(hFile, &fileInfo));
}