请问如何用VB编写本地磁盘搜索软
用api吧,声明如下:
FindFirstFile
Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
FindNextFile
Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_F...全部
用api吧,声明如下:
FindFirstFile
Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
FindNextFile
Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
根据结果判断是否是目录,如果是目录,递归调用,如果是文件,比对。
这种方法比较通用,在VC,VB,DELPHI,里面都可以,我曾用类似方法在DELPHI里面写一个。
以下是我搜索到的一个VC例子。
一、在不使用mfc的程序中获得某个目录下的所有文件名称,包括子目录。
把文件名称以一个固定的程度放入一个缓冲中,这个缓冲要足够的大,能容下所有的文件名称。
函数的输入为要查找的根目录,输出为存放所有文件名称的缓冲
算法:使用递归
二、代码:
void FindFileInDir(char* rootDir, char* strRet)
{
char fname[MAC_FILENAMELENOPATH];
ZeroMemory(fname, MAC_FILENAMELENOPATH);
WIN32_FIND_DATA fd;
ZeroMemory(&fd, sizeof(WIN32_FIND_DATA));
HANDLE hSearch;
char filePathName[256];
char tmpPath[256];
ZeroMemory(filePathName, 256);
ZeroMemory(tmpPath, 256);
strcpy(filePathName, rootDir);
BOOL bSearchFinished = FALSE;
if( filePathName[strlen(filePathName) -1] != '\\' )
{
strcat(filePathName, "\\");
}
strcat(filePathName, "*");
hSearch = FindFirstFile(filePathName, &fd);
//Is directory
if( (fd。
dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
&& strcmp(fd。cFileName, "。") && strcmp(fd。
cFileName, "。。") )
{
strcpy(tmpPath, rootDir);
strcat(tmpPath, fd。
cFileName);
FindFileInDir(tmpPath, strRet);
}
else if( strcmp(fd。
cFileName, "。") && strcmp(fd。cFileName, "。。") )
{
sprintf(fname, "%-50。
50s", fd。cFileName);
strcat(strRet + strRet[strlen(strRet)] , fname);
}
while( !bSearchFinished )
{
if( FindNextFile(hSearch, &fd) )
{
if( (fd。
dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
&& strcmp(fd。cFileName, "。") && strcmp(fd。
cFileName, "。。") )
{
strcpy(tmpPath, rootDir);
strcat(tmpPath, fd。
cFileName);
FindFileInDir(tmpPath, strRet);
}
else if( strcmp(fd。
cFileName, "。") && strcmp(fd。cFileName, "。。") )
{
sprintf(fname, "%-50。
50s", fd。
cFileName);
strcat(strRet + strRet[strlen(strRet)] , fname);
}
}
else
{
if( GetLastError() == ERROR_NO_MORE_FILES ) //Normal Finished
{
bSearchFinished = TRUE;
}
else
bSearchFinished = TRUE; //Terminate Search
}
}
FindClose(hSearch);
}
。收起