我有一个应用程序(C ++ Builder 6.0)需要知道特定文件夹中的图像总数,然后我必须加载它们:在ImageList或ComboBoxEx ...或任何其他控件中。 ..
我该怎么做?
我知道如何在控件中加载图像,或者保存在TList中,或者在ImageList中...但是如何知道目录中有多少文件文件,以及如何加载其中的每个图像??
我很抱歉我的英语。
答案 0 :(得分:1)
使用Win32函数FindFirstFile和FindNextFile ......?
答案 1 :(得分:1)
我昨天用C ++使用boost::filesystem库做了类似的事情。但是,如果您尚未使用boost,我强烈建议您只使用Windows库。这是我的代码,如果您有兴趣:
#include <algorithm>
#include <boost/filesystem.hpp>
#include <set>
namespace fs = boost::filesystem;
typedef std::vector<fs::path> PathVector;
std::auto_ptr<PathVector> ImagesInFolder(const fs::path& folderPath) {
std::set<std::string> targetExtensions;
targetExtensions.insert(".JPG");
targetExtensions.insert(".BMP");
targetExtensions.insert(".GIF");
targetExtensions.insert(".PNG");
std::auto_ptr<PathVector> paths(new PathVector());
fs::directory_iterator end;
for(fs::directory_iterator iter(folderPath); iter != end; ++iter) {
if(!fs::is_regular_file(iter->status())) { continue; }
std::string extension = iter->path().extension();
std::transform(extension.begin(), extension.end(), extension.begin(), ::toupper);
if(targetExtensions.find(extension) == targetExtensions.end()) { continue; }
paths->push_back(iter->path());
}
return paths;
}
这不会回答你关于如何将路径实际放入列表框的问题部分。
答案 2 :(得分:0)
没有切实可行的方法来识别任意文件夹中的每个图像。几乎任何你不能认定的东西,都可能是某种形象。然后,再次使用隐写术,甚至你可以识别的东西仍然可能(或包含)至少部分图像。
实际上,您希望选择一组您想要支持的格式,并编写了解它们的代码。出于一些目的,六种格式左右是相当充分的,尽管你选择的确切半打将因应用类型而异 - 例如,只有少数程序可用于位图和矢量图形。
一旦你决定了你想要的东西,DlgDirList
可能是列出一些文件最简单的方法。如果对您的目的不够灵活,下一个明显的选择是FindFirstFile
,FindNextFile
和FindClose
。
答案 3 :(得分:0)
要获取文件夹中所有文件的列表,请查看FindFirst中的SysUtils和FindNext函数。
这是一个示例函数,显示如何获取文件列表。
void __fastcall TForm1::GetDirList(TStrings *List, const AnsiString SearchStr)
{
TSearchRec SRec;
AnsiString TempFName;
List->Clear();
// start search
if (FindFirst(SearchStr, faAnyFile, SRec) == 0)
{
do
{
if ((SRec.Attr & faDirectory) != faDirectory) // exclude directories
{
List->Add(SRec.Name);
} // end if
}
while (FindNext(SRec) == 0);
FindClose(SRec);
} // end if
}
<强>示例:强> //获取目录中所有文件的列表 GetDirList(MyStringList,“C:\ images *。*”);
// get list of all .bmp files in directory
GetDirList(MyStringList, "C:\images\*.bmp");
答案 4 :(得分:0)
如果您可以升级到较新版本的C ++ Builder,请查看TMS AdvSmoothImageListBox中的TMS Software。
来自Embarcadero网站的TMS Smooth Controls are available free for C++Builder 2010用户。