Guten Abend Gemeinde,
Ich schreibe gerade für die Schule einen FTP Clienten, dieser Funktioniert eigentlich auch schon einwandsfrei, dennoch möchte ich noch so einige detail's anbringen.
Allerdings beweg ich mich da etwas im dunkeln, es würde mich sehr freuen wenn ihr mir ein paar Tipps geben könntet =)
hier der Komplette Sourcecode :
Spoiler anzeigen
Meine fragen dazu sind folgende:
Ich hoffe das einige von euch da draußen mir da etwas behilflich sein könnten.
Mfg RajYuJin
Ich schreibe gerade für die Schule einen FTP Clienten, dieser Funktioniert eigentlich auch schon einwandsfrei, dennoch möchte ich noch so einige detail's anbringen.
Allerdings beweg ich mich da etwas im dunkeln, es würde mich sehr freuen wenn ihr mir ein paar Tipps geben könntet =)
hier der Komplette Sourcecode :
VB.NET-Quellcode
- Imports System.Net
- Imports System.IO
- Public Class Form1
- Private Sub listFTP(ByVal URL As String, ByVal bk As String, ByVal pw As String)
- Dim requ As FtpWebRequest = Nothing
- Dim resp As FtpWebResponse = Nothing
- Dim reader As StreamReader = Nothing
- Try
- requ = CType(WebRequest.Create(URL), FtpWebRequest)
- requ.Credentials = New NetworkCredential(bk, pw)
- requ.Method = WebRequestMethods.Ftp.ListDirectory
- resp = CType(requ.GetResponse(), FtpWebResponse)
- reader = New StreamReader(resp.GetResponseStream())
- Do While (reader.Peek() > -1)
- ListBox1.Items.Add(reader.ReadLine())
- Loop
- ToolStripStatusLabel1.Text = "Auflistung Komplett"
- Catch ex As UriFormatException
- ToolStripStatusLabel1.Text = ex.Message
- Catch ex As WebException
- ToolStripStatusLabel2.Text = ex.Message
- Finally
- If reader IsNot Nothing Then reader.Close()
- End Try
- End Sub
- Private Sub downloadFTP(ByVal URL As String, ByVal bk As String, ByVal pw As String)
- Dim requ As FtpWebRequest = Nothing
- Dim resp As FtpWebResponse = Nothing
- Dim respStrm As Stream = Nothing
- Dim fileStrm As FileStream = Nothing
- Try
- requ = CType(WebRequest.Create(URL), FtpWebRequest)
- requ.Credentials = New NetworkCredential(bk, pw)
- requ.Method = WebRequestMethods.Ftp.DownloadFile
- resp = CType(requ.GetResponse(), FtpWebResponse)
- respStrm = resp.GetResponseStream()
- SaveFileDialog1.FileName = Path.GetFileName(requ.RequestUri.LocalPath)
- If (SaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK) Then
- fileStrm = File.Create(SaveFileDialog1.FileName)
- Dim buff(1024) As Byte
- Dim bytesRead As Integer = 0
- Do While (True)
- bytesRead = respStrm.Read(buff, 0, buff.Length)
- If (bytesRead = 0) Then Exit Do
- fileStrm.Write(buff, 0, bytesRead)
- Loop
- ToolStripStatusLabel1.Text = "Downlad komplett"
- End If
- Catch ex As UriFormatException
- ToolStripStatusLabel1.Text = ex.Message
- Catch ex As WebException
- ToolStripStatusLabel2.Text = ex.Message
- Catch ex As IOException
- ToolStripStatusLabel2.Text = ex.Message
- End Try
- End Sub
- Private Sub uploadFTP(ByVal fileName As String, ByVal URL As String, ByVal bk As String, ByVal pw As String)
- Dim requ As FtpWebRequest = Nothing
- Dim resp As FtpWebResponse = Nothing
- Dim requStrm As Stream = Nothing
- Dim fileStrm As FileStream = Nothing
- Try
- requ = CType(WebRequest.Create(URL), FtpWebRequest)
- requ.Credentials = New NetworkCredential(bk, pw)
- requ.Method = WebRequestMethods.Ftp.UploadFile
- requ.Timeout = System.Threading.Timeout.Infinite
- requ.Proxy = Nothing
- requStrm = requ.GetRequestStream()
- Dim buff(20480) As Byte
- Dim bytesRead As Integer = 0
- fileStrm = File.OpenRead(fileName)
- Do While (True)
- bytesRead = fileStrm.Read(buff, 0, buff.Length)
- If (bytesRead = 0) Then Exit Do
- requStrm.Write(buff, 0, bytesRead)
- Loop
- requStrm.Close()
- resp = CType(requ.GetResponse(), FtpWebResponse)
- ToolStripStatusLabel1.Text = "Upload Komplett"
- Catch ex As UriFormatException
- ToolStripStatusLabel1.Text = ex.Message
- Catch ex As IOException
- ToolStripStatusLabel2.Text = ex.Message
- Catch ex As WebException
- ToolStripStatusLabel2.Text = ex.Message
- Finally
- If resp IsNot Nothing Then resp.Close()
- If fileStrm IsNot Nothing Then fileStrm.Close()
- If requStrm IsNot Nothing Then requStrm.Close()
- End Try
- End Sub
- Private Sub deleteFTP(ByVal URL As String, ByVal bk As String, ByVal pw As String)
- Dim requ As FtpWebRequest = Nothing
- Dim resp As FtpWebResponse = Nothing
- Try
- requ = CType(WebRequest.Create(URL), FtpWebRequest)
- requ.Credentials = New NetworkCredential(bk, pw)
- requ.Method = WebRequestMethods.Ftp.DeleteFile
- resp = CType(requ.GetResponse(), FtpWebResponse)
- ToolStripStatusLabel1.Text = "Datei wurde gelöscht!"
- Catch ex As UriFormatException
- ToolStripStatusLabel1.Text = ex.Message
- Catch ex As WebException
- ToolStripStatusLabel2.Text = ex.Message
- Finally
- If resp IsNot Nothing Then resp.Close()
- End Try
- End Sub
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- ToolStripStatusLabel1.Text = ""
- ToolStripStatusLabel2.Text = ""
- lbSave.Hide()
- End Sub
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- lbSave.Text = ""
- ListBox1.Items.Clear()
- lbSave.Text = tbURL.Text
- listFTP(tbURL.Text, tbUsername.Text, tbPassword.Text)
- End Sub
- Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
- tbURL.Text = lbSave.Text
- tbURL.Text &= ListBox1.SelectedItems(0).ToString
- End Sub
- Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
- downloadFTP(tbURL.Text, tbUsername.Text, tbPassword.Text)
- End Sub
- Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
- If (OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK) Then
- uploadFTP(OpenFileDialog1.FileName, tbURL.Text & Path.GetFileName(OpenFileDialog1.FileName), tbUsername.Text, tbPassword.Text)
- End If
- End Sub
- Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
- If (MessageBox.Show("Wollen Sie die Datei wirklich löschen?", "Achtung", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = Windows.Forms.DialogResult.Yes) Then
- deleteFTP(tbURL.Text, tbUsername.Text, tbPassword.Text)
- End If
- End Sub
- End Class
Meine fragen dazu sind folgende:
- Wen ich damit eine grössere Datei downloade, friert meine form ein und lässt sich weder minimieren noch verschieben bis der download abgeschlossen wurde. Dies ist natürlich recht nervig. kann ich dies irgendwie verhindern?
- gibt es irgend eine Möglichkeit, die grösse der Bytes die schon heruntergeladen wurden anzuzeigen (zb. ProgressBar oder in Labels)
- und mir ist aufgefallen, das die Download Rate sehr klein ist, ist es möglich diese zu vergrössern, oder gar ohne Begrenzung zuhaben?
Ich hoffe das einige von euch da draußen mir da etwas behilflich sein könnten.
Mfg RajYuJin