请问:如何用API得到一个指定目录的所有文件

请问:如何用API得到一个指定目录的所有文件,第1张

主如果应用FindFirst()、FindNext()来查找所有的文件

Var

Path:String//指定的目次

SearchRec:

TSearchRec

while

FindNext(SearchRec)=0

do

Slist.Add(SearchRec.Name)

Slist:=

TStringList.Create()

Slist:

TStringList

begin

if

FindFirst(Path,faAnyFile,SearchRec)=0

then

begin

Slist.Add(SearchRec.Name)

end

FindClose(SearchRec)

end

//如许Slist里就记录了所有的文件名(包含路径)

没有文件列表,只能枚举所有文件,再根据文件的属性判断是文件或者文件夹。

下面是MSDN上的完整例子

#include <windows.h>

#include <tchar.h>

#include <stdio.h>

#include <strsafe.h>

#pragma comment(lib, "User32.lib")

void DisplayErrorBox(LPTSTR lpszFunction)

int _tmain(int argc, TCHAR *argv[])

{

WIN32_FIND_DATA ffd

LARGE_INTEGER filesize

TCHAR szDir[MAX_PATH]

size_t length_of_arg

HANDLE hFind = INVALID_HANDLE_VALUE

DWORD dwError=0

// If the directory is not specified as a command-line argument,

// print usage.

if(argc != 2)

{

_tprintf(TEXT("\nUsage: %s <directory name>\n"), argv[0])

return (-1)

}

// Check that the input path plus 3 is not longer than MAX_PATH.

// Three characters are for the "\*" plus NULL appended below.

StringCchLength(argv[1], MAX_PATH, &length_of_arg)

if (length_of_arg >(MAX_PATH - 3))

{

_tprintf(TEXT("\nDirectory path is too long.\n"))

return (-1)

}

_tprintf(TEXT("\nTarget directory is %s\n\n"), argv[1])

// Prepare string for use with FindFile functions. First, copy the

// string to a buffer, then append '\*' to the directory name.

StringCchCopy(szDir, MAX_PATH, argv[1])

StringCchCat(szDir, MAX_PATH, TEXT("\\*"))

// Find the first file in the directory.

hFind = FindFirstFile(szDir, &ffd)

if (INVALID_HANDLE_VALUE == hFind)

{

DisplayErrorBox(TEXT("FindFirstFile"))

return dwError

}

// List all the files in the directory with some info about them.

do

{

if (ffd.dwFileAttributes &FILE_ATTRIBUTE_DIRECTORY)

{

_tprintf(TEXT(" %s <DIR>\n"), ffd.cFileName)

}

else

{

filesize.LowPart = ffd.nFileSizeLow

filesize.HighPart = ffd.nFileSizeHigh

_tprintf(TEXT(" %s %ld bytes\n"), ffd.cFileName, filesize.QuadPart)

}

}

while (FindNextFile(hFind, &ffd) != 0)

dwError = GetLastError()

if (dwError != ERROR_NO_MORE_FILES)

{

DisplayErrorBox(TEXT("FindFirstFile"))

}

FindClose(hFind)

return dwError

}

void DisplayErrorBox(LPTSTR lpszFunction)

{

// Retrieve the system error message for the last-error code

LPVOID lpMsgBuf

LPVOID lpDisplayBuf

DWORD dw = GetLastError()

FormatMessage(

FORMAT_MESSAGE_ALLOCATE_BUFFER |

FORMAT_MESSAGE_FROM_SYSTEM |

FORMAT_MESSAGE_IGNORE_INSERTS,

NULL,

dw,

MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),

(LPTSTR) &lpMsgBuf,

0, NULL )

// Display the error message and clean up

lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT,

(lstrlen((LPCTSTR)lpMsgBuf)+lstrlen((LPCTSTR)lpszFunction)+40)*sizeof(TCHAR))

StringCchPrintf((LPTSTR)lpDisplayBuf,

LocalSize(lpDisplayBuf) / sizeof(TCHAR),

TEXT("%s failed with error %d: %s"),

lpszFunction, dw, lpMsgBuf)

MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK)

LocalFree(lpMsgBuf)

LocalFree(lpDisplayBuf)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11699059.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存