使用 wininet.dll api 从 FTP 站点搜索和检索文件名
Posted
技术标签:
【中文标题】使用 wininet.dll api 从 FTP 站点搜索和检索文件名【英文标题】:Searching & retrieving filenames from an FTP site using wininet.dll api 【发布时间】:2009-12-10 19:57:26 【问题描述】:我一直在尝试使用 wininet.dll api 来搜索 ftp 站点以查找匹配的文件,但由于某种原因它无法正常工作。 这是我一直在使用的方法。
Private Sub DoStuff()
Dim hConnection As Long, hOpen As Long, sOrgPath As String, lRes As Long
Dim scUserAgent$
scUserAgent$ = "vb wininet"
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
hConnection = InternetConnect(hOpen, mServer$, INTERNET_DEFAULT_FTP_PORT, mUserid$, mPassword$, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0)
''//set the current directory to 'root/testdir/testdir2'
FtpSetCurrentDirectory hConnection, "testdir/testdir2"
ReDim matchingFiles$(1)
Call SearchForFiles(hConnection, ".txt", matchingFiles$)
''//Close the connections
InternetCloseHandle hConnection
InternetCloseHandle hOpen
End Sub
这里是 SearchForFiles 函数
Public Sub SearchForFiles(hConnection As Long, fileExtension$, matchingFiles$())
Dim pData As WIN32_FIND_DATA, hFind As Long, lRet As Long
Dim i%
ReDim matchingFiles$(1)
i% = 1
''//create a buffer
pData.cFileName = String(MAX_PATH, 0)
''//find the first file
hFind = FtpFindFirstFile(hConnection, "*." + fileExtension$, pData, 0, 0)
''//if there is no file, then exit sub
If hFind = 0 Then Exit Sub
''//show the filename
matchingFiles$(i%) = Left(pData.cFileName, InStr(1, pData.cFileName, String(1, 0), vbBinaryCompare) - 1)
Do
i% = i% + 1
''//create a buffer
pData.cFileName = String(MAX_PATH, 0)
''//find the next file
lRet = InternetFindNextFile(hFind, pData)
''//if there is no next file, exit do
If lRet = 0 Then Exit Do
''//show the filename
ReDim Preserve matchingFiles$(UBound(matchingFiles) + 1)
matchingFiles$(i%) = Left(pData.cFileName, InStr(1, pData.cFileName, String(1, 0), vbBinaryCompare) - 1)
Loop
''//close the search handle
InternetCloseHandle hFind
End Sub
我一直得到的是“。” “..”表示从 SearchForFiles 函数返回的文件。我做错了什么吗?
谢谢!
【问题讨论】:
修复我的代码!你试过什么?它在哪里破裂?可以一步步来吗? 它不会损坏。只是它从不读取位于 /root/testdir/testdir2/ 目录下 FTP 站点上的匹配 .txt 文件 下次提交vb代码时,请注意语法高亮不喜欢撇号的注释。我冒昧地将所有评论'comment
更改为 ''//
,这样更好理解(也不会破坏您的代码)
感谢 xtofl!下次我会记住的
【参考方案1】:
您作为fileExtension$
参数提供给SearchForFiles
例程的".txt"
与"*."
模式一样连接在一起,产生"*..txt"
。也许这就是困扰您的程序的原因?我确实想知道为什么“。”和 ".." 是使用这种模式找到的,但是...
【讨论】:
以上是关于使用 wininet.dll api 从 FTP 站点搜索和检索文件名的主要内容,如果未能解决你的问题,请参考以下文章
使用 VS2010 在 C# 上出现 Wininet.dll 错误
使用 WinInet VB.net 测试与 FTP 服务器的连接
Wininet.dll 在提取 cookie 时崩溃 excel 64 位