直接上传新的Ftp列表框行

时间:2018-07-28 10:42:43

标签: .net vb.net visual-studio-2012 ftp listbox

我是否可以(将上载/添加的)列表框行添加到当前的FTP列表框行服务器而无需下载先前的ftp服务器列表框值。

与其将其他列表框行上传到Ftp列表框行服务器!

我可以简单地发送列表框新行,然后将其添加到当前列表框ftp服务器行中(不删除旧行,它仅添加新行) 使用当前的Ftp列表框行,而无需下载和上传整个ftp列表框?

示例:这是我的代码

  

下载代码(按钮1)[不重要]

   Dim request As FtpWebRequest =
   WebRequest.Create("ftp://test.com/test.txt")
   request.Method = WebRequestMethods.Ftp.DownloadFile
   request.Credentials = New NetworkCredential("tester1", 
           "password")

        Using response As FtpWebResponse = request.GetResponse(),
                  stream As Stream = response.GetResponseStream(),
                  reader As StreamReader = New StreamReader(stream)
            While Not reader.EndOfStream
                listbox1.Items.Add(reader.ReadLine())
            End While
        End Using

          ' Adding the listbox item's Before upload it again'

        listbox1.Items.Add(".")
  

上传代码(按钮2)

     

[重要的是使其直接将新行上载到当前的ftp列表框   行服务器]

                Dim request As FtpWebRequest =
                WebRequest.Create("ftp://test.com/test.txt")
                request.Method = WebRequestMethods.Ftp.UploadFile
                request.Credentials = New NetworkCredential("tester1", 
               "password")
                request.UseBinary = False

                Using stream As Stream = request.GetRequestStream(),
                          writer As StreamWriter = New StreamWriter(stream)
                    For index As Integer = 0 To listbox1.Items.Count - 1

                        writer.WriteLine(listbox1.Items(index))
                    Next
                End Using

            Catch ex As Exception

致谢

1 个答案:

答案 0 :(得分:0)

注意:我看到您使用的是Visual Studio2012。某些代码可能不受支持(未指定.Net版本)。 如果是这样,请对此发表评论。

WebRequest支持FTP APPE command的化身FtpWebRequest

请参见WebRequestMethods.FtpWebRequestMethods.Ftp.AppendFile

此方法发送Ftp APPE命令。如果上载的文件存在,它将附加新内容。
编写文本文件时,如果需要,您可能需要在每行后面附加一个Environment.Newline序列。

由于您拥有ListBox控件,因此可以提取其Items文本并以以下方式在每个项目字符串值前添加换行符:

Dim TextLines As String() = listBox1.Items.Cast(Of String)().Select(Function(ln) Environment.NewLine + ln).ToArray()

您可以按照以下方式调用方法:

Dim result As Long = Await FtpAppenAsync("ftp://ftp.server.com/[EntryDir]/[ExistingFile]", TextLines)

这是一种经过修改的方法,该方法允许将一些文本行附加到FTP服务器上的现有文本文件中:
请注意Encoding中的StreamWriter:它设置为Default→当前的本地代码页。
如果未指定编码,则默认为UTF8。按要求修改
)。

Public Async Function FtpAppenAsync(ResourceName As String, TextData As String()) As Task(Of Integer)

    Dim request As FtpWebRequest = CType(WebRequest.Create(ResourceName), FtpWebRequest)
    request.Credentials = New NetworkCredential("[FtpAccount]", "[FtpPassword]")
    request.Method = WebRequestMethods.Ftp.AppendFile
    request.UseBinary = True
    request.UsePassive = True

    Dim TextLinesWritten As Integer = 0
    Try
        Using ftpStream As Stream = Await request.GetRequestStreamAsync()
            Using ftpWriter As New StreamWriter(ftpStream, Encoding.Default)
                For Each TextLine As String In TextData
                    Await ftpWriter.WriteAsync(TextLine)
                    TextLinesWritten += 1
                    Console.WriteLine("Uploaded {0} lines", TextLinesWritten)
                Next
            End Using
        End Using
        Using response As FtpWebResponse = CType(Await request.GetResponseAsync(), FtpWebResponse)
            'Log-Return the StatusCode of the failed upload
            If Not (response.StatusCode = FtpStatusCode.ClosingData) Then Return -1
        End Using
    Catch ex As Exception
        'Log/report ex
        TextLinesWritten = -1
        Throw
    End Try
    Return TextLinesWritten
End Function

如果需要建立Ssl连接,请添加Imports和以下行:将其粘贴到该方法的顶部:
SecurityProtocolType取决于您的连接要求)

Imports System.Net.Security
Imports System.Security.Cryptography.X509Certificates

'Method code
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12

ServicePointManager.ServerCertificateValidationCallback =
    New RemoteCertificateValidationCallback(Function(s, Cert, Chain, sslErrors)
                                                Return True
                                            End Function)
request.EnableSsl = True