Einsteigerfrage bezüglich der Logik

xtramen01

Erfahrenes Mitglied
Hallo leute,

ich beschäftige mich seit ein paar Tagen mit vb express 2010.

Nun möchte ich beim KLick auf einen Button Verzeichnisse rekursiv einlesen.

Wie bekomme ich jetzt:

Code:
Public Sub dirSearch(strDir As String)
	Try
		For Each strDirectory As String In Directory.GetDirectories(strDir)
					' mach etwas....
			For Each strFile As String In Directory.GetFiles(strDirectory)
			Next

			dirSearch(strDirectory)
		Next
	Catch ex As Exception
		Console.WriteLine(ex.Message)
	End Try
End Sub

In den Actionhandler:

Code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 ' Hier sollten ja die Verzeichnisse ausgelesen werden.
    End Sub

Logischerweise sollte es ja so funktionieren:

Code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


  Public Sub dirSearch(strDir As String)
	Try
		For Each strDirectory As String In Directory.GetDirectories(strDir)
					' mach etwas....
			For Each strFile As String In Directory.GetFiles(strDirectory)
			Next

			dirSearch(strDirectory)
		Next
	Catch ex As Exception
		Console.WriteLine(ex.Message)
	End Try
End Sub

    End Sub

funktioniert so leider nicht.
hab es auch schon anders probiert. Aber es hagelt nur Fehler.
Kann mir das vielleicht jemand, der sich damit auskennt kurz erläutern, warum das so nicht geht und wie es richtig wäre?
Dann kapier ich auch vieles andere :)

Dankeschön!
 
Hi

Du musst im EventHandler nur deine Methode einfach aufrufen!
Code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
   dirSearch(rootDirectoryPath) 'Der Pfad, von dem du loslaufen willst muss mitübergeben werden!
End Sub
 
Hi,

Danke. Ich bin mit der Syntax leider noch gar nicht so vertraut.
Ich habe jetzt ein wenig um gestellt und leider funktioniert es nicht so wie ich mir das vorstelle.

Ich will damit erreichen das alle Verzeichnisse inkl. Unterverzeichnisse und deren Dateien hochgeladen werden.

Leider werden lediglich die Dateien des angegebenen Verzeichnisses hochgeladen. Nicht aber die Unterordner und deren Dateien.

Hast Du vielleicht einen Vorschlage oder einen Tipp was ich da falsch mache?

Code:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim SourcePath As String = "C:\Users\root\Desktop\up\"
        Dim TargetFilePath As String = String.Empty
        Dim UserName As String = "xxxx"
        Dim Password As String = "xxxx"

        For Each Item As String In Directory.GetFiles(SourcePath, "*", SearchOption.AllDirectories)

            TargetFilePath = Item.Replace(SourcePath, String.Empty).Replace("\", "/")

            My.Computer.Network.UploadFile(Item, "ftp://ftp.xxxx.de/httpdocs/" & TargetFilePath, UserName, Password)

        Next

    End Sub

Gruss und Danke!
 
Da hat nichts mit der Syntax zu tun! Du hast doch in deiner Methode auch schon einen Methodenaufruf! Das ist so nichts anderes

Die Unterverezichnisse werden ignoriert, weil du jetzt keine Rekursion mehr mehr hast!
 
Bahhh!
Ich bin einfach schon zu lange da drann :) Danke!

Aber ein wenig am verzweifeln bin ich jetzt schon.
So müsste es doch eigentlich funktionieren.

Nur leider bekomme ich von Exception die Meldung das der Ordner nicht gefunden wurde.
Listet mir aber schön den Ordner auf den er nicht finden konnte?!

Ordner ist definitiv da...die Messagebox zum Test, geht schön alle Verzeichnisse und Dateien durch.

Siehst Du was, was ich nicht sehe?

Code:
Public Class Form1


    Public Sub dirSearch(ByVal strDir As String)


        Dim SourcePath As String = strDir
        Dim TargetFilePath As String = String.Empty
        Dim TargetFile As String = String.Empty
        Dim UserName As String = "xxx"
        Dim Password As String = "xxx"

        Try 'Alle Ordner auslesen
            For Each strDirectory As String In Directory.GetDirectories(SourcePath, "*", SearchOption.AllDirectories)

                'MessageBox.Show(strDirectory)
                TargetFilePath = strDirectory.Replace(SourcePath, String.Empty).Replace("\", "/")
                My.Computer.Network.UploadFile(strDirectory, "ftp://ftp.xxx.de/httpdocs" & TargetFilePath, UserName, Password)

                'Alle Dateien auslesen
                For Each file As String In Directory.GetFiles(strDirectory)

                    'MessageBox.Show(file)
                    TargetFile = file.Replace(strDirectory, String.Empty).Replace("\", "/")
                    My.Computer.Network.UploadFile(file, "ftp://ftp.xxx.de/httpdocs" & TargetFile, UserName, Password)

                Next

                'Rekursion
                dirSearch(strDirectory)

            Next

        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

    End Sub







    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        dirSearch("C:\Users\root\Desktop\up")
    End Sub
End Class

Gruß
 
Im ersten Schleifendurchlauf versuche ich ja die Ordner auszulesen und diese auf den FTP Server zu kopieren. Und da kommt dann auch die Meldung.

Im zweiten Durchlauf, versuche ich dann die dazugehörigen Dateien auszulesen und auf den FTP Server zu übertragen.

Aber ich meine entdeckt zu haben warum dei Meldung kommt:

Code:
Die Datei C:\Users\root\Desktop\up\Neuer Ordner konnte nicht gefunden werden. :nothing

My.Computer.Network.UploadFile lädt ja nur Dateien und keine Ordner hoch?! kann das sein?

Wenn ja, kennst Du einen anderen Weg?

Gruss
 
Zurück