使用 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,而不是ListDirectoryDetailsListDirectory 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