使用FtpWebRequest检查VB.NET的文件/子目录是否存在

时间:2017-01-05 13:42:39

标签: vb.net ftp ftpwebrequest

我的FTP上传有问题,希望你能帮助我。我正在尝试创建文件夹,然后将文件上传到它们。我的程序应该做的是检查文件夹是否已经存在,如果没有,则创建一个之前已检查过名称的新文件夹。程序运行正常,但下面描述的错误除外。

我的问题:
我想上传一个名为ghandle的文件夹 - >按预期工作。
之后,我想上传名为handle的文件夹 - >不起作用,因为.Contains方法检查FTP服务器上的文件夹,找到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

提前致谢

1 个答案:

答案 0 :(得分:0)

首先,使用ListDirectory,而不是ListDirectoryDetailsListDirectory仅返回普通名称,足以达到您的目的且易于解析。

然后使用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