Pobieranie nazwy pliku przez OpenFileDialog

0

Witam. Oto mój kod

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim OFD As New OpenFileDialog
        Dim fullFile() As Byte
        Try
            OFD.Filter = "Binary files (*.bin)|*.bin"
            If OFD.ShowDialog = Windows.Forms.DialogResult.OK Then
                fullFile = File.ReadAllBytes(OFD.FileName)

**                Dim writer As New BinaryWriter(File.Open("plik.bin", FileMode.Open))**
                writer.Seek(&H5B0, SeekOrigin.Begin)
                writer.Write(CUShort(&HB1AA))
                writer.Close()
            End If

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

Chciałbym, aby program pobierał plik z "Open File Dialog". Wiem, że problem jest w pogrubionej linijce. Po zmianie w tej linijce na

                Dim writer As New BinaryWriter(fullFile)

otrzymuje:

Błąd 1 Nie można przekonwertować wartości typu „1-wymiarowa tablica elementów Byte.” na „System.IO.Stream”.

Proszę o poprawienie kodu.

0

Bo musisz tam podać ścieżkę do pliku którą masz w OpenFileDialog.

0

Tak ?

          Dim writer As New BinaryWriter(OFD.OpenFile)

Teraz po otwarciu pliku otrzymuję msg.box z wiadomością

Error
Nie Można zapisać w strumieniu.

0

po co robisz ReadAllBytes?

0

Dodane, do dalszej części kodu, choć na ten czas mogę usunąć, bo jest to niepotrzebne, tak jak mówisz.

1

Raczej coś takiego powinno być. (nie testowałem, tylko tak głośno myślę)

Dim writer As New BinaryWriter(File.Open(OFD.FileName, FileMode.Open, FileAccses.ReadWrite))
0

Doczytałem trochę temat i stwierdziłem, że powinienem użyć FileStream

Teraz wygląda, to tak

   Using fs As New FileStream(OFD.FileName, FileMode.Open, FileAccess.Write, FileShare.None)
                    Using writer As New BinaryWriter(fs)

No i reszta kodu

Tylko, co zrobić, żeby program nie nadpisał istniejącego pliku tylko poprosił o zapisanie go w nowym miejscu ?

If OFD.ShowDialog = Windows.Forms.DialogResult.OK Then
            Using fs As New FileStream(OFD.FileName, FileMode.Open, FileAccess.Write, FileShare.None)
                Using writer As New BinaryWriter(fs)
                    writer.Seek(&H5B0, SeekOrigin.Begin)
                    writer.Write(CUShort(&HB1AA))

                    Dim SaveFileDialog As New SaveFileDialog
                    SaveFileDialog.ShowDialog()

                End Using
            End Using
        End If
1

Ale przecież jak używasz SaveFileDialog to użytkownik sam wybiera czy zapisać to w nowym pliku czy nadpisać istniejący.

0

Ale u mnie ten dialog się wcale nie chcę pojawić.
Chodzi, oto żeby oryginalny otwarty plik nie został zmieniony.

@EDIT
Poprawiłem kod i okno SFD się otwiera, lecz nie zapisuje zmodyfikowanego pliku i dalej zmienia oryginalny otwarty plik.

0
ymourok3 napisał(a):

Ale u mnie ten dialog się wcale nie chcę pojawić.

Bo nie dajesz nigdzie ShowDialog

ymourok3 napisał(a):

Chodzi, oto żeby oryginalny otwarty plik nie został zmieniony.

No to chyba w SaveFileDialog trzeba wskazać wyjściowy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0