Win32 API 中获取文件夹下文件列表的函数是哪个呀?知道的朋友告诉下.
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Win32 API 中获取文件夹下文件列表的函数是哪个呀?知道的朋友告诉下.相关的知识,希望对你有一定的参考价值。
不是图形化的.要获取具体的文件列表内容. 我要做的是PACK包的压包,需要知道点击压缩的文件夹下的所有文件.以便压入包内.有什么好方法可以获得文件列表的.
没有文件列表,只能枚举所有文件,再根据文件的属性判断是文件或者文件夹。下面是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);
参考技术A SHBrowseForFolder可以提供文件列表,再用API函数SHGetPathFromIDList可以获得具体的路径,如果用户按的是“取消”按钮,则返回值为NULL
定义:
Option Explicit
Public Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type
Public Const BIF_RETURNONLYFSDIRS = &H1
Public pidl As Long
Public Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Public Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
SHGetPathFromIDList 中pidl参数使用SHBrowseForFolder的返回值,pszPath返回函数调用结束后用户选择的路径 参考技术B vb吗
可以这样,一个按钮,两个列表框
Public Function GetDirList(strPath As String)
Dim DirBox
Set DirBox = Controls.Add("VB.DirListBox", "DirListBox")
DirBox.path = strPath
For i = 0 To DirBox.ListCount - 1
GetDirList = GetDirList & DirBox.List(i) & vbCrLf
Next
End Function
Public Function GetFilesList(strPath As String)
Dim FileBox
Set FileBox = Controls.Add("VB.FileListBox", "FileListBox")
FileBox.path = "c:\"
For i = 0 To FileBox.ListCount - 1
GetFilesList = GetFilesList & FileBox.List(i) & vbCrLf
Next
End Function
Private Sub Command1_Click()
Dim a As String
a = GetDirList("c:\")
For i = 0 To UBound(Split(a, vbCrLf))
List1.AddItem Split(a, vbCrLf)(i)
Next
a = GetFilesList("c:\")
For i = 0 To UBound(Split(a, vbCrLf))
List2.AddItem Split(a, vbCrLf)(i)
Next
End Sub 参考技术C 类定义在C:\Program Files\Microsoft Visual Studio\VC98\MFC\Include目录下的.h头文件中
api函数是在.dll文件中的,不是VC的一部分,在系统文件夹下:C:\WINDOWS\system32
C函数在C:\Program Files\Microsoft Visual Studio\VC98\Lib目录下的.lib文件中
使用Java API操作HDFS时,_方法用于获取文件列表?
当使用 Java API 操作 HDFS 时,可以使用 FileSystem.listFiles() 方法来获取文件列表。该方法接受一个 Path 对象,表示要列举文件的目录,并返回一个 RemoteIterator<LocatedFileStatus> 对象,该对象可用于迭代目录中的文件。例如,下面的代码演示了如何使用 listFiles() 方法来获取 HDFS 上的文件列表:
// 定义 HDFS 连接配置
Configuration conf = new Configuration();
// 获取 HDFS FileSystem 对象
FileSystem fs = FileSystem.get(conf);
// 定义要列举文件的目录
Path dirPath = new Path("/user/hadoop");
// 获取文件列表
RemoteIterator<LocatedFileStatus> fileIter = fs.listFiles(dirPath, true);
// 遍历文件列表
while (fileIter.hasNext())
// 获取当前文件信息
LocatedFileStatus fileStatus = fileIter.next();
// 输出文件名称和大小
System.out.println(fileStatus.getPath().getName() + " : " + fileStatus.getLen());
参考技术A 在 Java API 中,可以使用 FileSystem.listFiles() 方法来获取 HDFS 上文件的列表。该方法接受一个路径作为参数,并返回一个包含文件信息的迭代器。您可以使用该迭代器来遍历 HDFS 上的文件,并获取每个文件的名称,大小等信息。例如,以下代码展示了如何使用 FileSystem.listFiles() 方法来获取 HDFS 上的文件列表:
Path path = new Path("/path/to/directory");
FileSystem fs = FileSystem.get(new Configuration());
RemoteIterator<LocatedFileStatus> fileStatusIterator = fs.listFiles(path, true);
while (fileStatusIterator.hasNext())
LocatedFileStatus fileStatus = fileStatusIterator.next();
String fileName = fileStatus.getPath().getName();
long fileSize = fileStatus.getLen();
// do something with the file name and size
在上面的代码中,我们首先使用 Path 类来指定要获取文件列表的目录路径。然后,我们使用 FileSystem 类来获取 HDFS 文件系统的实例。接下来,我们调用 FileSystem.listFiles() 方法来获取该目录中的文件列表。最后,我们使用 RemoteIterator 来遍历文件列表,并获取每个文件的名称和大小。 参考技术B FileSystem类的listStatus()方法用于获取文件列表。
以上是关于Win32 API 中获取文件夹下文件列表的函数是哪个呀?知道的朋友告诉下.的主要内容,如果未能解决你的问题,请参考以下文章