这里以图片为例,也能是其他文件类型。话不多说,直接开整。
by HPC_ZY
方法
- 核心函数
int GetDicomFileName( char* strDirNames, // 路径
int max, // 预分配个数(可事先预判文件数量)
int gain, // 再分配个数(预分配不够时)
char* type // 文件类型
)
{
int len = strlen(strDirNames) + 4;
m_nDicomFileNum = 0;
m_pDicomFileName = (char**)malloc(max * sizeof(char*));
m_pDicomFileName[m_nDicomFileNum] = (char*)malloc((len + 12) * sizeof(char));
intptr_t handle = 0;
struct _finddata_t fileinfo;
char filepath[50] = "";
strcpy(filepath, strDirNames);
strcat(filepath, type);
handle = _findfirst(filepath, &fileinfo);
if (-1 == handle)
return 0;
strcpy(m_pDicomFileName[m_nDicomFileNum], strDirNames);
strcat(m_pDicomFileName[m_nDicomFileNum], fileinfo.name);
m_nDicomFileNum++;
while (!_findnext(handle, &fileinfo))
{
if (m_nDicomFileNum >= max) {
max += gain;
m_pDicomFileName = (char**)realloc(m_pDicomFileName, (max) * sizeof(char*));
}
m_pDicomFileName[m_nDicomFileNum] = (char*)malloc((len + 12) * sizeof(char));
strcpy(m_pDicomFileName[m_nDicomFileNum], strDirNames);
strcat(m_pDicomFileName[m_nDicomFileNum], fileinfo.name);
m_nDicomFileNum++;
}
_findclose(handle);
return 1;
}
- 调用
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <iostream>
#include<io.h>
using namespace std;
// 偷懒,不想封装成类,所以这两个参数放在全局了
char**m_pDicomFileName = NULL;
int m_nDicomFileNum = 0;
int GetDicomFileName(char* strDirNames, int max, int gain, char* type);
int main()
{
// 比如我们找png格式的文件
GetDicomFileName("c:\\users\\写你自己的地址\\data\\", 200 , 50, "*.png");
cout << m_nDicomFileNum << endl;
for (int k = 0; k < m_nDicomFileNum; k++) {
cout << m_pDicomFileName[k] << endl;
}
}
其他
- 也可以用来搜索各种文件
类型 | 写法 |
---|---|
jpg | *.jpg |
png | *.png |
dicom | *.dcm |
txt | *.txt |
名叫test的所有类型 | test.* |
路径下所有文件 | *.* |