nepixl
Goto Top

NET: Unterstützung bei FTP Programm Invoke + Deligate

Hallo werte Admins,

leider bin ich beauftragt worden, ein weiteres FTP Tool mit GUI zu basteln.
Da ich meine Codes nur laienhaft (Copy&Paste) zusammen bastel bräuchte ich mal wieder Hilfe von fähigen Codern.

Habe auf 'ner Seite ein Script gefunden (Klick) welches meinen Anforderungen halbwegs gerecht wird.

Aktuell habe ich 2 Probleme:
  • Gerne würde ich nicht nur Dateien sondern Ordner und Unterordner auswählen und auflisten und anschließend uploaden lassen. (Derzeit nur MultipleFiles)
  • Benötige ich wohl Hilfe bzgl Delegate und Invoke (Soweit eingelesen aber für die Umsetzung fehlt es an Erfahrung).

Falls wer Lust hat, das Script ein wenig zu helfen und ggf. zu pimpen wäre ich dankbar! face-smile (Insofern Interessant, verlinke ich euch im fertigen Tool).

Anbei der aktuelle Code:
Imports System.IO
Imports System.Net

Public Class Form1

    Private Sub MainForm_Load(ByVal sender As Object, ByVal e As EventArgs)
        Control.CheckForIllegalCrossThreadCalls = False
    End Sub

    Private Sub btnAddFile_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnAddFile.Click

        Dim OpenFile As New OpenFileDialog() With {.Multiselect = True}
        If OpenFile.ShowDialog() = Windows.Forms.DialogResult.OK Then
            If OpenFile.FileNames.Count = 1 Then

                Dim newItm As New ListViewItem(Path.GetFileName(OpenFile.FileName))
                newItm.SubItems.Add(txtFTPServer.Text & "/" & Path.GetFileName(OpenFile.FileName))  
                newItm.SubItems.Add("")  
                newItm.SubItems.Add(OpenFile.FileName)
                lstCollection.Items.Add(newItm)

            ElseIf OpenFile.FileNames.Count > 1 Then
                For Each Str As String In OpenFile.FileNames
                    If My.Computer.FileSystem.FileExists(Str) Then
                        Dim newItm As New ListViewItem(Path.GetFileName(Str))
                        newItm.SubItems.Add(txtFTPServer.Text & "/" & Path.GetFileName(Str))  
                        newItm.SubItems.Add("")  
                        newItm.SubItems.Add(Str)
                        lstCollection.Items.Add(newItm)
                    End If
                Next
            End If
            lblCount.Text = "0 /" & lstCollection.Items.Count  
        End If
    End Sub

    Public Sub btnAction_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnAction.Click
        bWorker.RunWorkerAsync()
    End Sub

    Private Sub bWorker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bWorker.DoWork
        For Each itm As ListViewItem In lstCollection.Items
            Try
                Dim request As FtpWebRequest = DirectCast(WebRequest.Create(New Uri(itm.SubItems.Item(1).Text)), FtpWebRequest)
                request.Method = WebRequestMethods.Ftp.UploadFile
                request.Credentials = New NetworkCredential(txtFTPUsername.Text, txtFTPPassword.Text)
                request.UseBinary = True
                request.UsePassive = False

                Dim buffer(1023) As Byte
                Dim bytesIn As Long = 1
                Dim totalBytesIn As Long = 0

                Dim filepath As System.IO.FileInfo = New System.IO.FileInfo(itm.SubItems.Item(3).Text)
                Dim ftpstream As System.IO.FileStream = filepath.OpenRead()
                Dim flLength As Long = ftpstream.Length
                Dim reqfile As System.IO.Stream = request.GetRequestStream

                Do Until bytesIn < 1
                    bytesIn = ftpstream.Read(buffer, 0, 1024)
                    If bytesIn > 0 Then
                        reqfile.Write(buffer, 0, bytesIn)
                        totalBytesIn += bytesIn
                        If flLength > 0 Then
                            Dim perc As Integer = (totalBytesIn / flLength) * 100
                            bWorker.ReportProgress(perc, CInt(itm.Index + 1))
                        End If
                    End If
                Loop
                reqfile.Close()
                ftpstream.Close()
                itm.SubItems.Item(2).Text = "File Succesfully uploaded!"  
            Catch ex As Exception
                itm.SubItems.Item(2).Text = "File was not uploaded!"  
            End Try
        Next
    End Sub

    Private Sub bWorker_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bWorker.ProgressChanged
        pBar.Value = e.ProgressPercentage
        lblPercent.Text = e.ProgressPercentage & " %"  
        lblCount.Text = CInt(e.UserState) & " / " & lstCollection.Items.Count  
    End Sub

    Private Sub bWorker_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bWorker.RunWorkerCompleted
        MsgBox("Finish!")  
    End Sub

    Private Sub btnAction_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAction.Click

    End Sub

    Private Sub OpenFileDialog_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs)

    End Sub
End Class

Falls Ihr noch Infos braucht, einfach anfragen.

Ich danke Euch!

Grüße
PixL
adminde_ftp

Content-Key: 347080

Url: https://administrator.de/contentid/347080

Ausgedruckt am: 19.03.2024 um 03:03 Uhr

Mitglied: eisbein
eisbein 23.08.2017 aktualisiert um 12:12:50 Uhr
Goto Top
Hallo!

Wie willst du etwas coden wenn du nicht einmal den Befehlssatz der jeweiligen Programmiersprache kennst?

Wie der Name schon sagt Openfiledialog -> Öffne Dateiauswahl.
Für Ordner/Verzeichnisse nimmt du FolderBrowserDialog -> Öffne Ordnerauswahl.

Schau dir mal die Funktion My.Computer.FileSystem.GetFiles an und schau dir den Namespace System.IO.File an.

Gruß
Eisbein
Mitglied: nepixl
nepixl 23.08.2017 um 12:31:52 Uhr
Goto Top
Hallo eisbein,

da hast Du wohl oder übel Recht.
Auf die Geschichte mit dem FolderBrowser hätte ich auch kommen können .. *rolleyes*
Werde mal auf Tuchfühlung gehen mit den von Dir genannten Tipps.

Danke soweit face-smile

Gruß
Mitglied: eisbein
eisbein 23.08.2017 um 14:39:50 Uhr
Goto Top
Hallo!

Gerne würde ich nicht nur Dateien sondern Ordner und Unterordner auswählen und auflisten und anschließend uploaden lassen.

Das wird sich mit FolderBrowserDialog und Openfiledialog nicht so einfach umsetzen lassen, wenn du Dateien und Verzeichnisse auswählbar machen willst.
Hierfür musst du dir selbst etwas basteln face-wink oder du machst 2 Buttons (Datei auswählen und Verzeichnis auswählen).

Gruß
eisbein
Mitglied: nepixl
nepixl 23.08.2017 um 15:05:39 Uhr
Goto Top
Hallo eisbein,

das habe ich leider auch feststellen müssen. Generell reicht mir die Ordnerauswahl - seitdem ich auf FolderBrowserDialog umgestiegen bin, funktioniert das Listing der Datei/Ordner nicht mehr.

Werde wohl von komplett Neuem anfangen - komme so leider nicht weiter.

Gruß
Mitglied: eisbein
Lösung eisbein 24.08.2017 um 07:00:11 Uhr
Goto Top
Hallo!

Schau dir mal dieses Beispiel an:

https://www.codeproject.com/Articles/8546/An-All-VB-NET-Explorer-Tree-Co ...

Gruß
eisbein
Mitglied: nepixl
nepixl 24.08.2017 um 08:24:41 Uhr
Goto Top
Hallo eisbein,

schaue ich mir über den Mittag an.
Danke Dir! face-smile

Gruß