Dateikopieren System.IO.File.Copy, Prozessbar und zweites Fenster

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von singu.

    Dateikopieren System.IO.File.Copy, Prozessbar und zweites Fenster

    Hi,

    bin heute Nacht mal wieder weit gekommen... :)

    Stehe gerade vor einem Problem, dass ich eine Dateiverschieben will, was was einen fest vorgegebenen Pfad hat.

    Pfad X Quelle Name zu Pfad Y Ziel Name, wobei Name gleich bleibt - und in einer Listbox ausgewählt wird.

    Eigentlich funktioniert alles bis auf dieser Fehlremeldung:
    Der Wert vom Typ "String" kann nicht in "1-dimensionales Array von String" konvertiert werden.

    Hier erst mal der Code:

    Hauptprogramm

    VB.NET-Quellcode

    1. ' Pfade
    2. Dim DOCORDNER_q As String = "\\" & Serverpfad & "\" & Userpfad & "\" & Username & "\" & dmsPfad & "\ScannDokumente\"
    3. Dim DOCORDNER_z As String = "\\" & Serverpfad & "\" & Userpfad & "\" & Username & "\" & dmsPfad & "\Datentabellen\FILES\" & TextBox3.Text & "\" & TextBox4.Text & "\" & TextBox5.Text & "\"
    4. 'Testen ob Datei evtl. schon vorhanden ist...
    5. Dim Kontrollwert_a As String
    6. Kontrollwert_a = "0"
    7. If IO.File.Exists(DOCORDNER_z & TextBox6.Text) = True Then
    8. MsgBox(DOCORDNER_z & TextBox6.Text & "Diese Datei existiert bereits. " _
    9. & "Keine möglichkeit zum Archivieren.", MsgBoxStyle.Exclamation, _
    10. "FEHLER - Datei vorhanden")
    11. Kontrollwert_a = "1"
    12. End If
    13. ' Hier wird die betreffende Datei verschoben!
    14. ' out("Datei kopiert!")
    15. If Kontrollwert_a = "0" Then
    16. Call Datei_Verschieben.Show()
    17. .... da kommt dann noch was nach, was aber nix mit Kopieren zu tun hat.


    Datei_Verschieben.vb

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.IO.Directory
    3. Imports System.IO.File
    4. Imports System.Xml
    5. Public Class Datei_Verschieben
    6. Dim fc As FileCopy
    7. Dim ConfigPfad = Environment.GetFolderPath(Environment.SpecialFolder.Personal)
    8. Dim Serverpfad As String
    9. Dim Userpfad As String
    10. Dim dmsPfad As String
    11. Dim scannerpfad As String
    12. Dim Username As String = Environment.UserName()
    13. Dim Unterverzeichnis As String
    14. Dim Dokumentenmappen As String
    15. Dim MappenDateien As String
    16. Private Sub Datei_Verschieben_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    17. ' Hier werden die Pfade geladen!
    18. Dim XMLDoc As New XmlDocument
    19. Dim Knoten As XmlNode
    20. XMLDoc.Load(ConfigPfad & "\DMS_Pfade.xml")
    21. Dim Knotenliste As XmlNodeList = XMLDoc.SelectNodes("/Programmeinstellungen/Pfade")
    22. For Each Knoten In Knotenliste
    23. Serverpfad = Knoten.Attributes("Serverpfad").Value
    24. Userpfad = Knoten.Attributes("Userpfad").Value
    25. dmsPfad = Knoten.Attributes("dmsPfad").Value
    26. scannerpfad = Knoten.Attributes("scannerpfad").Value
    27. Next
    28. 'Dim fo As New OpenFileDialog
    29. 'Dim fb As New FolderBrowserDialog
    30. 'fo.Multiselect = True
    31. 'fo.ShowDialog()
    32. 'fb.Description = "Wählen Sie den Ordner wohin die Dateien kopiert werden sollen"
    33. 'fb.ShowDialog()
    34. ' Pfade
    35. Dim DOCORDNER_q As String = "\\" & Serverpfad & "\" & Userpfad & "\" & Username & "\" & dmsPfad & "\ScannDokumente\"
    36. Dim DOCORDNER_z As String = "\\" & Serverpfad & "\" & Userpfad & "\" & Username & "\" & dmsPfad & "\Datentabellen\FILES\" & Hauptprogramm.TextBox3.Text & "\" & Hauptprogramm.TextBox4.Text & "\" & Hauptprogramm.TextBox5.Text & "\"
    37. fc = New FileCopy(DOCORDNER_q & Hauptprogramm.TextBox6.Text, DOCORDNER_z & Hauptprogramm.TextBox6.Text) <-- HIER MECKERT ER! - Fehlermeldung wird hierher verwiesen
    38. fc.setLabel(Me.Label2)
    39. fc.setProgressBar(Me.ProgressBar1)
    40. fc.copyFiles()
    41. Button1.Visible = False
    42. Button2.Visible = True
    43. Me.Refresh()
    44. End Sub
    45. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    46. fc.cancelWork()
    47. Button1.Visible = True
    48. Button2.Visible = False
    49. End Sub


    FileCopy.vb

    VB.NET-Quellcode

    1. ....
    2. 'Zuerst muss geprüft werden, ob alle angegeben Pfade gültig sind und
    3. 'die gesammt Größe aller Dateien errechnen
    4. '<--
    5. For Each s As String In files
    6. If IO.File.Exists(s) Then
    7. aBytes += IO.File.ReadAllBytes(s).Length
    8. Else
    9. MessageBox.Show("Fehler, datei " & s & " nicht gefunden!")
    10. Exit Sub
    11. End If
    12. Next <- HIER PASST IHM WAS NICHT MIT DEM NEXT...
    13. ...


    Kann zwar soweit an totaler Anfänger den code schon ganz gut nachvollziehen, aber bei diesen Fehlern tu ich mir schon echt schwer...
    Das Programm FileCopy habe ich mir aus dem Internet geholt, vorher in einem anderen Testprojekt ausprobiert - in der Originalfassung - und es funktioniert super...
    Ich möchte halt nur keinen Filedialog haben - sondern fest vorgegebene Pfade mit einer ausgewählten Datei...

    Könnt Ihr mir da bisselr weiterhelfen ?

    Danke vielmals...

    lris08
    hab ich schon versucht!

    System.IO.File.Copy und das
    IO.File.Copy

    Da kommt dann diese Fehlermeldung:
    Der Typ "System.IO.File.Copy" ist nicht definiert.

    Das ist aber vorhanden:
    Imports System.IO
    Imports System.IO.Directory
    Imports System.IO.File
    hier mal der code davon - wo diese Fehlermeldung ausgegeben wird:
    Der Wert vom Typ "String" kann nicht in "1-dimensionales Array von String" konvertiert werden.


    VB.NET-Quellcode

    1. ' Pfade
    2. Dim DOCORDNER_q As String = "\\" & Serverpfad & "\" & Userpfad & "\" & Username & "\" & dmsPfad & "\ScannDokumente\"
    3. Dim DOCORDNER_z As String = "\\" & Serverpfad & "\" & Userpfad & "\" & Username & "\" & dmsPfad & "\Datentabellen\FILES\" & Hauptprogramm.TextBox3.Text & "\" & Hauptprogramm.TextBox4.Text & "\" & Hauptprogramm.TextBox5.Text & "\"
    4. fc = New FileCopy(DOCORDNER_q & Hauptprogramm.TextBox6.Text, DOCORDNER_z & Hauptprogramm.TextBox6.Text)
    5. fc.setLabel(Me.Label2)
    6. fc.setProgressBar(Me.ProgressBar1)
    7. fc.copyFiles()



    früher war er mal so - so hats auch funz... aber da gibts ja den Dialog - den ich nicht will...

    VB.NET-Quellcode

    1. Dim fo As New OpenFileDialog
    2. Dim fb As New FolderBrowserDialog
    3. fo.Multiselect = True
    4. fo.ShowDialog()
    5. fb.Description = "Wählen Sie den Ordner wohin die Dateien kopiert werden sollen"
    6. fb.ShowDialog()
    7. fc = New FileCopy(fo.FileNames, fb.SelectedPath & "\")
    8. fc.setLabel(Me.Label1)
    9. fc.setProgressBar(Me.ProgressBar1)
    10. fc.copyFiles()
    ich denke du musst statt

    VB.NET-Quellcode

    1. fb.ShowDialog()
    2. fc = New FileCopy(fo.FileNames, fb.SelectedPath & "\")
    3. fc.setLabel(Me.Label1)
    4. fc.setProgressBar(Me.ProgressBar1)
    5. fc.copyFiles()

    das schreiben

    VB.NET-Quellcode

    1. If fb.ShowDialog = System.Windows.Forms.DialogResult.OK then
    2. fc.setLabel(Label1)
    3. fc.setProgressBar(Progressbar1)
    4. IO.File.Copy(fc.filename, neuerpfad+dateiname)


    lg Gugi
    Das schreibt er mit jetzt als Fehlermeldung:

    Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    mit verweis an diese Stelle:

    VB.NET-Quellcode

    1. fc.setLabel(Label2)
    2. fc.setProgressBar(ProgressBar1)


    ok dann mal anders...

    vielleicht ist das alles auch bisser zu gross von mir versucht aufzuziehen mit der Progressbar...


    PS: ja so meinte ich das, aheb ich aber schon ihne das if ausprobiert - siehe oben diese fehlermeldung kommt dan a

    vielleicht gehts auch leichter:

    Was ich vorhabe:

    in Listbox wird eine Datei mackiert.
    drücke auf den knopf archivieren, dann soll ein fenster aufgehen, die eine statusanzeige laufen bis die datei kopiert wird. anschließend soll sich das fenster wieder schließen...
    was vielleicht noch hilfreich sein könnte, die Dateigröße habe ich bereits im vorfeld ausgelesen.

    vielleicht einfach nur ein einfacher prozessbalken der bis zu der gröse der datei nochzählt...?
    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    mach es einfach ohne progressbar... mit dem io.file.copy, und die gröse der datei bekommt man mit io.fileinfo

    lg Gugi

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