Bytearray in Datei spiechern

  • VB.NET
  • .NET (FX) 4.0

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Mircosofter2206.

    Bytearray in Datei spiechern

    Hallo Leute,

    nach langer Zeit mal wieder was von mir :)
    Ich bastle an einem Simplen File-Manager. Der braucht natürlich auch eine CopyPaste-Funktion.
    Ich habe zunächst diesen Code geschrieben(Vereinfachte Version):

    VB.NET-Quellcode

    1. Public Sub Kopieren(ByVal FileName As String)
    2. Dim ByteCollection As Byte() = GetBytesFromFile(Path.GetFullPath(FileName))
    3. My.Computer.Clipboard.SetData("ExplorerFileData", ByteCollection)
    4. My.Computer.Clipboard.SetData("ExplorerFileName", Path.GetFileName(FileName))
    5. End Sub
    6. Public Sub Einfügen(ByVal FileName As String)
    7. Dim Names As String = CType(My.Computer.Clipboard.GetData("ExplorerFileName"), String)
    8. Dim args As Byte() = CType(My.Computer.Clipboard.GetData("ExplorerFileData"), Byte())
    9. File.WriteAllBytes(Names, args)
    10. End Sub
    11. Public Function GetBytesFromFile(ByVal FileName As String) As Byte()
    12. Dim fs As FileStream = New FileStream(FileName, FileMode.Open)
    13. Dim reader As BinaryReader = New BinaryReader(fs)
    14. Dim Data As Byte() = reader.ReadBytes(CType(fs.Length, Long))
    15. reader.Close()
    16. fs.Close()
    17. Return Data
    18. End Function

    Mein Problem ist, dass zwar das Bytearray richtig eingelesen wird, aber nicht gescheit in´s Clipboard geschrieben(oder
    aus dem Clipboard gelesen) wird. Hat jemand eine Idee, wie ich es hinbekommen würde?

    Grüsse,
    Mircosofter ^^
    Wenn ich die Zwischenablage richtig verstehe, dann kann darin immer nur ein Datenelement (ob Text, Bild, Audio oder so) gespeichert werden. Somit könntest du dir ein Datenformat ausdenken, in dem dann beide Daten (Pfad und Inhalt) gespeichert werden. Jedoch würde ich persönlich für eine Copy&Paste-Funktion beim Kopieren nur den Pfad speichern und dann, sobald eingefügt werden soll, sowohl die Datei auslesen als auch in die neue Datei schreiben. Für einen solchen Vorgang gibt es auch bereits Funktionen in System.IO.File.
    @Vainamo V
    Da es auch eine "Cut"-Funktion gibt(die ich aussenvor gelassen habe, da es momentan nicht so wichtig ist) und auch Dateien zwischen verschiedenen Fenstern "bewegt" werden sollen.

    @lukekogv
    Stimmt, wieso bin ich nicht vorher darauf gekommen? :)
    Ich habe es nun vor folgendermaßen zu lösen: Ich schreibe in den Zwischenspeicher ein StringArray, wobei der erste Eintrag der Dateiname und der Zweite der Dateiinhalt(das Bytearray mit Base64 kodiert) enthalten wird.

    EDIT: Hat funktioniert, Danke das ihr euch die Zeit genommen habt ;)

    Hier nochmal mein Code:

    VB.NET-Quellcode

    1. Private Sub Cut(ByVal FileName As String)
    2. Dim FileContainsByte As Byte() = GetBytesFromFile(FileName)
    3. Dim TempCopyPasteFile(2) As String
    4. TempCopyPasteFile(0) = IO.Path.GetFileName(FileName)
    5. TempCopyPasteFile(1) = System.Convert.ToBase64String(GetBytesFromFile(IO.Path.GetFullPath(FileName)))
    6. My.Computer.Clipboard.SetData("ExplorerFile", TempCopyPasteFile)
    7. End Sub
    8. Private Sub Copy(ByVal FileName As String)
    9. Dim FileContainsByte As Byte() = GetBytesFromFile(FileName)
    10. Dim TempCopyPasteFile(2) As String
    11. TempCopyPasteFile(0) = IO.Path.GetFileName(FileName)
    12. TempCopyPasteFile(1) = System.Convert.ToBase64String(GetBytesFromFile(IO.Path.GetFullPath(FileName)))
    13. My.Computer.Clipboard.SetData("ExplorerFile", TempCopyPasteFile)
    14. End Sub
    15. Private Sub Paste()
    16. Dim TempStringCollection As String() = CType(My.Computer.Clipboard.GetData("ExplorerFile"), String())
    17. Dim Names As String = TempStringCollection(0)
    18. Dim args As Byte() = System.Convert.FromBase64String(TempStringCollection(1))
    19. IO.File.WriteAllBytes(Names, args)
    20. End Sub
    21. Public Function GetBytesFromFile(ByVal FileName As String) As Byte()
    22. Dim fs As IO.FileStream = New IO.FileStream(FileName, IO.FileMode.Open)
    23. Dim reader As IO.BinaryReader = New IO.BinaryReader(fs)
    24. Dim Data As Byte() = reader.ReadBytes(CType(fs.Length, Long))
    25. reader.Close()
    26. fs.Close()
    27. Return Data
    28. End Function

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Mircosofter2206“ ()