我是否可以(将上载/添加的)列表框行添加到当前的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
致谢
答案 0 :(得分:0)
注意:我看到您使用的是Visual Studio2012。某些代码可能不受支持(未指定.Net版本)。
如果是这样,请对此发表评论。
WebRequest
支持FTP APPE
command的化身FtpWebRequest。
请参见WebRequestMethods.Ftp→WebRequestMethods.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