Bitte um Hilfe ! Kann Pfad aus Textbox nicht Übergeben an FileCopy !

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von TVX.

    Bitte um Hilfe ! Kann Pfad aus Textbox nicht Übergeben an FileCopy !

    Fröhliches Hallo miteinander ! ich bin neu hier im Forum und beschäftige mich noch nicht all zu lange mit vb habe allerdings sehr viel Spaß daran und habe mir schon ein schönes Archiv angelegt !
    Mein jetziges Problem ist eigentlich lächerlich ,aber da ich immer noch keine Lösung gefunden habe - Trotz ausgiebiger Suche habe ich mir ein Hertz gefasst und mich mal zu Fragen getraut !

    ICH DANKE SCHON MAL IM VORAUS DANKE !

    1. Das geht ! ;)



    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    Me.FolderBrowserDialog2.ShowDialog()
    Pfad = Me.FolderBrowserDialog2.SelectedPath
    If Not Pfad.EndsWith("\") Then
    Pfad &= "\"
    End If
    Me.TextBox2.Text = Pfad

    Dim sPath As String

    If IO.File.Exists(TextBox1.Text) Then
    End If
    sPath = TextBox1.Text

    If IO.File.Exists(TextBox2.Text) Then
    End If
    Path = TextBox2.Text

    On Error Resume Next
    My.Computer.FileSystem.CopyDirectory(TextBox1.Text, TextBox2.Text, True) ------ Pfad wird übermittelt !


    End Sub
    ------------------------------------------------------------------------------------------------------------------------------

    2. Der Fehler ;(


    versuche ich den Zielpfad hier in meinen Copybefehl zu griegen gehts ums verrecken nicht !





    On Error GoTo texterror
    For i As Integer = 0 To ListBox1.Items.Count - 1
    My.Computer.FileSystem.CopyFile(ListBox1.Items(i), "??? ZIELPFAD???" & IO.Path.GetFileName(ListBox1.Items(i)), True)
    Next
    Exit Sub
    texterror:
    MsgBox("Kopiervorgang fehlgeschlagen!" & vbCrLf & vbCrLf & "Kopieren nur mit Pfadangabe in Textbox möglich !")

    End Sub

    -----------------------------------------------------------------------------------------------------------------------------------------------
    Bitte um anläuten per Email einfach saiten link an ( andre1979@gmx.net ) schicken !!! DANKE DANKE DANKE !!!
    Schreib den Code komplett neu. Dinge wie GoTo, On Error Resume Next, MsgBox und den My-Namespace sollte man meiden wie die Pest.
    Stattdessen gibts Methoden, vernünftige Fehlerbehandlung, MessageBox.Show und statt dem My-Clusterfuck den System.IO-Namespace, speziell dessen File-Klasse. ;)
    Huhu,

    willkommen im Forum.

    Beim Aufruf von Deinem FolderBrowserDialog ist es wichtig, dass Du den Button abfragst, den der Benutzer gedrückt hat. Drückt er nämlich in Deinem Fall auf abbrechen, dann läuft das Ganze in einen Fehler, da kein Pfad gewählt wurde.

    Beispiel:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    4. Dim fBD As New FolderBrowserDialog
    5. If fBD.ShowDialog() = Windows.Forms.DialogResult.OK Then
    6. End If
    7. End Sub
    8. End Class


    Der Code zwischen If und End If wird hier nur ausgeführt, wenn der User wirklich den OK-Knopf gedrückt hat.

    TVX schrieb:


    VB.NET-Quellcode

    1. If Not Pfad.EndsWith("\") Then
    2. Pfad &= "\"
    3. End If



    Das kannst Du Dir sparen, da es eine tolle Funktion in .Net gibt, die Dir das abnimmt, dazu komm ich später.

    TVX schrieb:


    VB.NET-Quellcode

    1. If IO.File.Exists(TextBox1.Text) Then
    2. End If
    3. sPath = TextBox1.Text
    4. If IO.File.Exists(TextBox2.Text) Then
    5. End If
    6. Path = TextBox2.Text



    Diese If-Blöcke bewirken gar nichts, wenn Du sie so nutzt.

    TVX schrieb:


    VB.NET-Quellcode

    1. On Error Resume Next



    Das solltest Du aus Deinem Programmierwortschatz so schnell wieder streichen, wie Du es Dir gemerkt hast. Das ist uralt und existiert, keine Ahnung warum noch. Nicht verwenden.

    TVX schrieb:


    VB.NET-Quellcode

    1. On Error GoTo texterror
    2. For i As Integer = 0 To ListBox1.Items.Count - 1
    3. My.Computer.FileSystem.CopyFile(ListBox1.Items(i), "??? ZIELPFAD???" & IO.Path.GetFileName(ListBox1.Items(i)), True)
    4. Next
    5. Exit Sub
    6. texterror:
    7. MsgBox("Kopiervorgang fehlgeschlagen!" & vbCrLf & vbCrLf & "Kopieren nur mit Pfadangabe in Textbox möglich !")
    8. End Sub



    Die Sachen aus dem My-Namespace, solltest Du, wie Samus schon sagte, auch nicht verwenden. Wenn Du Dateien kopieren willst, gibt es Funktionen im System.IO Namespace.

    Ich kann jetzt nur raten, was Du da anstellst. Du hast wohl Dateinamen in Deiner Listbox, oder? Dateinamen gehören nicht in eine ListBox. In eine ListBox gehören Instanzen vom Typ FileInfo.

    Beispiel:

    VB.NET-Quellcode

    1. Dim dI As New DirectoryInfo("c:\")
    2. Dim fI() As FileInfo = dI.GetFiles("*.*")
    3. Me.ListBox1.Items.AddRange(fI)


    Ich kann mir vorstellen, dass Du das nicht ganz verstehst, aber in eine ListBox kann man nicht nur Strings packen, man kann so gut wie alles da reinstecken. Wenn Du ein FileInfo hinzufügst, wird intern die .ToString()-Methode des Objekts aufgerufen und angezeigt. In Wirklichkeit steckt aber das ganze Objekt in der ListBox, auf welches Du wie gewohnt zugreifen kannst.

    VB.NET-Quellcode

    1. For i As Integer = 0 To Me.ListBox1.Items.Count - 1
    2. Dim f As FileInfo = DirectCast(Me.ListBox1.Items(i), FileInfo)
    3. f.CopyTo(Path.Combine("d:", f.Name))
    4. Next


    Hier siehst Du auch die Funktion, die Dir das Hantieren mit den "\" abnimmt. Nennt sich Path.Combine.

    Samus sagte, Du sollst alles nochmal neu schreiben, ich stimme dem zu. Ich hab Dir jetzt ein paar Infos an die Hand gegeben, damit solltest Du Dein Programm schon effizienter gestalten können.

    Wenn Du iwo nicht weiterkommst, dann melde Dich wieder.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Willkommen im Forum. :thumbup:
    Setze auf den Copy-Befehl mal einen Haltepunkt und sieh Dir an, was in den Textboxen drinsteht.
    Klick auf Copy und drück auf F1 (Hilfe) und vergleich das, was Du liest mit dem, was Dein Programm macht / gemacht hat.
    Wenn Du einen Unterschied feststellst, hast Du einen Fehler gefunden. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    JUP JUNGS ICH HABS :!: NUN WIRD DER PFAD ÜBERNOMMEN :!:
    Er list jetzt die ListBox1 aus und kopiert alle angegebenen Dateien in gewünschten Ordner !

    DIE LÖSUNG:
    -------------------------------------------------------------------------------------------
    Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click
    Me.FolderBrowserDialog3.ShowDialog()
    Pfad = Me.FolderBrowserDialog3.SelectedPath -------MEIN ZIELPFAD !
    If Not Pfad.EndsWith("\") Then
    Pfad &= "\"
    End If
    Me.TextBox2.Text = Pfad

    For i As Integer = 0 To ListBox1.Items.Count - 1
    My.Computer.FileSystem.CopyFile(ListBox1.Items(i), Me.TextBox2.Text & IO.Path.GetFileName(ListBox1.Items(i)), True)
    Next

    Exit Sub

    ----------------------------------------------------------------------------------------------------------------------

    Das wars erst mal für die Mittagspause ,das nächste was mir auf enm Herten liegt kommt heute Abend :D

    TVX schrieb:

    VB.NET-Quellcode

    1. Me.FolderBrowserDialog3.ShowDialog()
    hat einen Rückgabewert (wenn Du z.B. den Dialog mit Esc beendest), den solltest Du auswerten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich weis was du meinst mit dem Rückwert so habe ich das auch bei den anderen gemacht :)


    If Me.FolderBrowserDialog2.ShowDialog = Windows.Forms.DialogResult.OK Then
    Dim FileDirectory As New IO.DirectoryInfo(FolderBrowserDialog2.SelectedPath)
    Dim FilesFromDirectory As IO.FileInfo() = FileDirectory.GetFiles()
    For Each File As IO.FileInfo In FilesFromDirectory
    Me.ListBox1.Items.Add(File)


    -----------------------------------------------------------------------------------------------------------------------------NEUER ABSCHNITT !
    Nun zu Fase 2 in der ich Dateien suchen gehe , diese dann über die Lißtbox ausgebe und nach belieben von dort weiter verwende !

    Hierbei bin ich mir jetzt nicht einig wie ich die Dateiauswahl elegant von außen treffen soll und zwar an der stelle ("*.txt")

    1 ? -(InputBox("Bitte Dateiendung eingeben:"))

    2 ? über Textbox

    3. ??????????????

    HIER DER COD--------------------------------------------------------------------------------------------------------------------------------------- HIER DER COD



    'Durchsucht alle Verzeichnisse
    Private Sub Button12_Click(sender As Object, e As EventArgs) Handles Button12.Click

    Me.FolderBrowserDialog3.ShowDialog()
    Pfad = Me.FolderBrowserDialog3.SelectedPath
    If Not Pfad.EndsWith("\") Then
    Pfad &= "\"
    End If
    Me.TextBox2.Text = Pfad


    Dim oDir As IO.DirectoryInfo
    On Error Resume Next
    oDir = New IO.DirectoryInfo(Me.TextBox2.Text)

    ' alle Dateien des Ordners ermitteln
    ' und in der ListBox anzeigen
    Rekursiv(oDir)
    End Sub
    Private Sub Rekursiv(ByVal oDir As IO.DirectoryInfo)
    Dim oSubDir As IO.DirectoryInfo
    Dim oFile As IO.FileInfo

    ' zunächst alle Dateien des Ordners aufspüren
    For Each oFile In oDir.GetFiles("*.txt") ------------- Für hier anzudocken suche ich ne elegante lösung !!!
    With oFile
    ListBox1.Items.Add(.DirectoryName & "\" & .Name)
    End With
    Next

    ' Jetzt alle Unterverzeichnis durchlaufen
    ' und die Prozedur rekursiv selbst aufrufen
    For Each oSubDir In oDir.GetDirectories()
    Rekursiv(oSubDir)
    Next
    End Sub

    ---------------------------------------------------------------------------------------------------------------------------UND JA ICH WERD AUCH HIER DEN FOLDERBROWSER ÄNDERN :D

    TVX schrieb:

    VB.NET-Quellcode

    1. Me.FolderBrowserDialog3.ShowDialog()
    2. Pfad = Me.FolderBrowserDialog3.SelectedPath
    3. If Not Pfad.EndsWith("\") Then
    4. Pfad &= "\"
    5. End If
    6. Me.TextBox2.Text = Pfad
    Hier wertest Du den Rückgabewert nicht aus.
    Wo hast Du die Inputbox her? Solch kenn ich nicht. ;(
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Die ist ganz simpel und erfüllt ihren zweck reibungslos
    hatte noch nie Probleme damit ^^


    Was mich aber mal brennend interessieren würde ((( KANN ICH DAS HINTERGRUNDBILD MEINER FORM IN VB 2012 BESCHRIFTEN ))) ???


    Wenn ja ! ? Wie bitte ?


    Danke !

    TVX schrieb:

    hatte noch nie Probleme damit
    Du arbeitest mit VB2012 und kommst mit Ranzcontrols aus dem VB6-Kompatibilitätsmodus.

    TVX schrieb:

    HINTERGRUNDBILD MEINER FORM IN VB 2012 BESCHRIFTEN
    Entweder Du editierst das Hintergrundbild oder Du machst das im Paint-Event der Form.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    TVX schrieb:

    wos versteckt ist
    Da:

    VB.NET-Quellcode

    1. Private Sub Form1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
    2. e.Graphics.DrawString("bla", New Font("Arial", 20), Brushes.Black, New Point(30, 30))
    3. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Super ich verstehe ,ich dachte erst es sei irgendwo noch was versteckt was mir entgangen währe --Kommt sofort ins Archiv !

    :thumbsup: RodFromGermany - Ich muss sagen du bist sehr zuvorkommend ! Dafür Danke ich dir nochmals :thumbsup:

    Schau mal bitte noch über das Thema von mir: (( Dateien in Ordner und Unterordner suchen ))

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TVX“ ()