在c++中如何获取文件名

2025-04-08 11:03:46
推荐回答(1个)
回答1:

一、在不使用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);

}