Datei Kopieren Fehler

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Datei Kopieren Fehler

    Hallo zusammen, ich versuche eine Datei zu kopieren die ich in einem Listview Angewählt habe:

    VB.NET-Quellcode

    1. Dim server_datei = ListView1.SelectedItems(0).Tag
    2. Dim datei As String
    3. If FolderBrowserDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
    4. datei = FolderBrowserDialog1.SelectedPath & "\"
    5. Copy(server_datei, datei)
    6. End If

    Nur leider erscheint folgender fehler:

    Quellcode

    1. Ein Ausnahmefehler des Typs "System.InvalidCastException" ist in BMU_Artikeldatenbank.exe aufgetreten.
    2. Zusätzliche Informationen: Das Objekt des Typs "System.String" kann nicht in Typ "System.IO.FileInfo" umgewandelt werden.

    Kann mir jemand helfen?

    schnibli schrieb:

    VB.NET-Quellcode

    1. Dim server_datei = ListView1.SelectedItems(0).Tag
    Fang an mit Option strict On.
    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!

    schnibli schrieb:

    richtigen Dateityp für server_datei?
    Du musst doch wissen, was Du dem zuweist.
    Offensichtlich

    schnibli schrieb:

    "System.IO.FileInfo"
    Caste es richtig und nimm den richtigen Member.
    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!
    Dann setze einen Haltepunkt und sieh nach, was drinsteht.

    Wie setzt man einen Haltepunkt? Lerne, wie man VisualStudio richtig nutzt.

    //Edit: Du machst da komische Sachen. Nutze die Controlfeatues korrekt: Keine Strings in die File-Listbox!
    Mit freundlichen Grüßen,
    Thunderbolt

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Thunderbolt“ ()

    Mein Haltepunkt im Anhang,

    Ich weis du bist sicher gut in Vb.net ich währe froh wenn du mir mal aufzeigen könntest wie ich dies richtig konvertiere :s...
    Bilder
    • haltepunkt.JPG

      46,67 kB, 858×185, 111 mal angesehen
    VB.NET habe ich ewig nicht mehr benutzt, ich bin aktuell nur noch in C# unterwegs.

    Nothing (null in C#) ist "Nichts". Und die Datei, auf die dieses Nichts zeigt, versuchst du nun zu kopieren. Hast du dir den zweiten Link angeguckt? Das ist dieser: Keine Strings in die File-Listbox!. Außerdem scheint Option Strict noch aus zu sein: Visual Studio - Empfohlene Einstellungen.
    Mit freundlichen Grüßen,
    Thunderbolt

    schnibli schrieb:

    wie ich dies richtig konvertiere
    Klick zunächst drauf und überzeuge Dich, von welchem Typ es ist.
    An welcher Stelle in Deinem Code wird denn .Tag belegt? Mit welchem Code?

    VB.NET-Quellcode

    1. Dim INHALT As DER_TYP_HALT = CType(xxx.Tag, DER_TYP_HALT)
    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!
    Hallo,
    Die Belegung ist hier:

    VB.NET-Quellcode

    1. ListView1.Items.Clear()
    2. Dim di As New System.IO.DirectoryInfo("\\192.168.61.5\web\uploads\")
    3. If (di.Exists) Then
    4. For Each fi As System.IO.FileInfo In di.GetFiles()
    5. ListView1.Items.Add(New ListViewItem() With {.Text = fi.Name, .Tag = fi.FullName})
    6. ' MsgBox(fi.FullName)
    7. Next
    8. End If

    Beim laden der Dateien in die Listbox.

    Nun kann ich die gewählte Datei löschen:

    VB.NET-Quellcode

    1. Dim tt As String
    2. tt = ListView1.SelectedItems(0).Tag.ToString
    3. My.Computer.FileSystem.DeleteFile(tt.ToString)

    Ich weis da fehlt noch die Überprüfung, dies war als test.
    Nur eben beim kopieren habe ich mühe -.-
    Hast du das ignoriert?

    Thunderbolt schrieb:

    Nothing (null in C#) ist "Nichts". Und die Datei, auf die dieses Nichts zeigt, versuchst du nun zu kopieren. Hast du dir den zweiten Link angeguckt? Das ist dieser: Keine Strings in die File-Listbox!. Außerdem scheint Option Strict noch aus zu sein: Visual Studio - Empfohlene Einstellungen.
    Mit freundlichen Grüßen,
    Thunderbolt
    Hallo und Guten Morgen,

    Ich habe nun alles umgebaut so wie es ErfinderdesRades zeigt.

    Nun wieder das Selbe Problem :s

    VB.NET-Quellcode

    1. Private Sub bt_copy_Click(sender As Object, e As EventArgs) Handles bt_copy.Click
    2. Dim server_datei = _Files(lstFiles.SelectedIndex).FullName
    3. Dim datei As String
    4. If FolderBrowserDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
    5. datei = FolderBrowserDialog1.SelectedPath & "\"
    6. Copy(server_datei, datei)
    7. End If
    8. End Sub


    Ich weis nicht wie ich das ding richtig konvertieren kann :s

    Ich habe diese Kopier funktion da ich mit dem Progressbar arbeiten möchte:

    VB.NET-Quellcode

    1. Private Sub Copy(ByVal SourceFile As FileInfo, ByVal Target As String)
    2. ' Progressbar anpassen
    3. ProgressBar1.Value = 0
    4. ' Es gilt hier zu beachten, dass der Maximumwert ein Integer ist und
    5. ' daher die Length-Angabe über dem Bereich des Integer hinaus liegen kann.
    6. ' In so einem Fall müsste man den Maximumwert anders definieren
    7. ProgressBar1.Maximum = CInt(SourceFile.Length)
    8. Try
    9. ' Quelle
    10. Dim fsmsource As FileStream
    11. ' Zieldatei
    12. Dim fsmtarget As FileStream
    13. ' Größe des bei jedem Durchlauf einzulesenden Datenpaketes
    14. Dim buffersize As Int32 = 1024 * 30 ' (30 KByte)
    15. ' Enthält nacher die in buffersize angegeben Menge an
    16. ' eingelesenen Daten
    17. Dim buffer(buffersize) As Byte
    18. ' Ermittelt die tatsächliche eingelesene Menge an Daten
    19. ' im Bytearray readbyte
    20. Dim readbyte As Int32
    21. ' Quelldatei
    22. fsmsource = New FileStream(SourceFile.FullName, FileMode.Open, _
    23. FileAccess.Read, FileShare.Read)
    24. ' Zieldatei
    25. fsmtarget = New FileStream(Target + "\" + SourceFile.Name, _
    26. FileMode.OpenOrCreate, FileAccess.Write)
    27. ' Daten nach und nach einlesen und im Zielstream wieder zurückschreiben
    28. While fsmsource.Position < fsmsource.Length
    29. ' Quelle einlesen
    30. readbyte = fsmsource.Read(buffer, 0, buffersize)
    31. ' In das Ziel schreiben
    32. fsmtarget.Write(buffer, 0, readbyte)
    33. ' Value Eigenschaft der Progressbar anpassen, das Label gibt
    34. ' den prozentualen Fortschritt an
    35. With ProgressBar1
    36. .Value += readbyte
    37. lbl_status.Text = CStr(CInt(100 * .Value / .Maximum)) + "%"
    38. End With
    39. ' Reporten
    40. Application.DoEvents()
    41. End While
    42. ' Streams schließen
    43. fsmsource.Close()
    44. fsmtarget.Close()
    45. MsgBox("Datei erfolgreich kopiert", MsgBoxStyle.Information)
    46. ProgressBar1.Value = 0
    47. lbl_status.Text = "0%"
    48. Catch ex As Exception
    49. MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
    50. End Try
    51. End Sub


    Danke für die Hilfe

    schnibli schrieb:

    VB.NET-Quellcode

    1. Dim server_datei = _Files(lstFiles.SelectedIndex).FullName
    2. ' ...
    3. Copy(server_datei, datei)
    Du sendest einen String, aber Du empfängst eine FileInfo.

    schnibli schrieb:

    VB.NET-Quellcode

    1. Private Sub Copy(ByVal SourceFile As FileInfo, ByVal Target As String)

    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!

    Thunderbolt schrieb:

    mit den richtigen Typen arbeitest
    Da musser wohl noch Option Infer On setzen.
    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!