使用 FtpWebRequest 检查 file/subdirectory 是否存在 VB.NET
Check for file/subdirectory existence with VB.NET using FtpWebRequest
我的 FTP 上传有问题,希望你能帮助我。我正在尝试创建文件夹,然后将文件上传到它们。我的程序应该做的是检查一个文件夹是否已经存在,如果不存在,则创建一个新的文件夹,其名称之前检查过。程序运行正常,除了下面描述的错误。
我的问题:
我想上传一个名为 ghandle
的文件夹 -> 按预期工作。
之后,我想上传一个名为 handle
的文件夹 -> 不起作用,因为检查 FTP 服务器上文件夹的 .Contains
方法找到 ghandle
并且停止,因为 ghandle
包含 handle
.
是否有像 .Contains
这样的其他选项,它只会检查整个单词或完全匹配?
这是我的源代码:
Dim dirname = Path.GetFileNameWithoutExtension(openFileDialogHtml.FileName) & "_files"
Dim ftp = "ftp://" & ftp_address.Text & "/"
Dim user = ftp_user.Text
Dim pass = ftp_password.Text
Dim request As Net.FtpWebRequest = Net.FtpWebRequest.Create(ftp)
Dim creds As Net.NetworkCredential = New Net.NetworkCredential(user, pass)
request.Credentials = creds
Dim resp As Net.FtpWebResponse = Nothing
request.Method = Net.WebRequestMethods.Ftp.ListDirectoryDetails
request.KeepAlive = True
Using resp
resp = request.GetResponse()
Dim sr As StreamReader = New StreamReader(resp.GetResponseStream(), System.Text.Encoding.ASCII)
Dim s As String = sr.ReadToEnd()
If Not s.Contains(dirname) Then
request = Net.FtpWebRequest.Create(ftp & dirname)
request.Credentials = creds
request.Method = Net.WebRequestMethods.Ftp.MakeDirectory
resp = request.GetResponse()
MsgBox("Created folder " & dirname)
Else
MsgBox("Folder " & dirname & " already exists!")
End If
End Using
提前致谢
首先,使用ListDirectory
,而不是ListDirectoryDetails
。 ListDirectory
returns 纯名称,足以满足您的目的且易于解析。
然后使用 String.Split
method:
将输出拆分为单个文件名的数组
Dim names As String() =
sr.ReadToEnd().Split(
New Char() {vbCr, vbLf}, StringSplitOptions.RemoveEmptyEntries)
并使用 IEnumerable.Contains
extension method 检查给定的文件名:
If Not names.Contains(dirname) Then
我的 FTP 上传有问题,希望你能帮助我。我正在尝试创建文件夹,然后将文件上传到它们。我的程序应该做的是检查一个文件夹是否已经存在,如果不存在,则创建一个新的文件夹,其名称之前检查过。程序运行正常,除了下面描述的错误。
我的问题:
我想上传一个名为 ghandle
的文件夹 -> 按预期工作。
之后,我想上传一个名为 handle
的文件夹 -> 不起作用,因为检查 FTP 服务器上文件夹的 .Contains
方法找到 ghandle
并且停止,因为 ghandle
包含 handle
.
是否有像 .Contains
这样的其他选项,它只会检查整个单词或完全匹配?
这是我的源代码:
Dim dirname = Path.GetFileNameWithoutExtension(openFileDialogHtml.FileName) & "_files"
Dim ftp = "ftp://" & ftp_address.Text & "/"
Dim user = ftp_user.Text
Dim pass = ftp_password.Text
Dim request As Net.FtpWebRequest = Net.FtpWebRequest.Create(ftp)
Dim creds As Net.NetworkCredential = New Net.NetworkCredential(user, pass)
request.Credentials = creds
Dim resp As Net.FtpWebResponse = Nothing
request.Method = Net.WebRequestMethods.Ftp.ListDirectoryDetails
request.KeepAlive = True
Using resp
resp = request.GetResponse()
Dim sr As StreamReader = New StreamReader(resp.GetResponseStream(), System.Text.Encoding.ASCII)
Dim s As String = sr.ReadToEnd()
If Not s.Contains(dirname) Then
request = Net.FtpWebRequest.Create(ftp & dirname)
request.Credentials = creds
request.Method = Net.WebRequestMethods.Ftp.MakeDirectory
resp = request.GetResponse()
MsgBox("Created folder " & dirname)
Else
MsgBox("Folder " & dirname & " already exists!")
End If
End Using
提前致谢
首先,使用ListDirectory
,而不是ListDirectoryDetails
。 ListDirectory
returns 纯名称,足以满足您的目的且易于解析。
然后使用 String.Split
method:
Dim names As String() =
sr.ReadToEnd().Split(
New Char() {vbCr, vbLf}, StringSplitOptions.RemoveEmptyEntries)
并使用 IEnumerable.Contains
extension method 检查给定的文件名:
If Not names.Contains(dirname) Then