Vb.net 创建一个文件流并保存它

Vb.net 创建一个文件流并保存它,vb.net,filestream,Vb.net,Filestream,我是这个论坛的新手,我想知道我是否可以在Visual Basic 2015中获得一些关于文件流的帮助 我试图读取一个文件并在二进制级别编辑其中的一些值。目前我得到了以下代码: Dim fStream4 As New FileStream(FirmwareFileLocation.Remove(FileLocation.Length - 3) + "_tmp_final.dd", FileMode.Create, FileAccess.Write) Dim br4 As New BinaryWri

我是这个论坛的新手,我想知道我是否可以在Visual Basic 2015中获得一些关于文件流的帮助

我试图读取一个文件并在二进制级别编辑其中的一些值。目前我得到了以下代码:

Dim fStream4 As New FileStream(FirmwareFileLocation.Remove(FileLocation.Length - 3) + "_tmp_final.dd", FileMode.Create, FileAccess.Write)
Dim br4 As New BinaryWriter(fStream4)

br4.Write(final2bytes)
br4.Close()
fStream4.Close()
问题是,当我点击按钮执行这部分代码时,我没有得到一个新文件。我是忘了什么还是这里出了什么问题

请注意,我对使用文件流还不熟悉,所以我的知识非常有限。我所知道的只是我读过的一些基础知识

更新:

Private Sub SaveDataButton_Click(sender As System.Object, e As System.EventArgs) Handles SaveDataButton.Click
    '     Dim Writer As New BinaryWriter(File.Open("C:/test.bin", FileMode.Create))
    '    Dim numBytes As Long = tempArr.Length
    '   Writer.Write("R")
    '  Writer.Write(456)
    ' Writer.Write(456.789)
    ' Writer.Write("please test string here")


    '   Dim fStream As New FileStream(LocationOfFirmware.FileName + "_tmp_new", FileMode.Open, FileAccess.Write)
    '   Dim br As New BinaryWriter(fStream)

    '   tempArr = br.Write(CInt(numBytes))


    Dim newbytes() As Byte = TempArr2
    Dim newstring = UnicodeBytesToString(newbytes)


    '     CurrentArticleTextBox.Text = Mid(string2, 1652, 19)

    Dim temparr5 = NewSerialNumber.Text

    Dim SerialNumberOffset As Integer = 1625 ' Offset van het serienummer in de gemodificeerde array (1625, 11 bytes)
    Dim ArticleNumberOffset As Integer = 1643 ' Offset van het artikelnummer in de gemodificeerde array (1643, 19 bytes)


    Dim MacAddress1Offset As Integer = 1676 ' Offset van MAC Adres #1 in de gemodificeerde array (1676, 17 bytes)
    Dim MacAddress2Offset As Integer = 2014 ' Offset van MAC Adres #2 in de gemodificeerde array (2014, 17 bytes)
    Dim MacAddress3Offset As Integer = 2088 ' Offset van MAC Adres #3 in de gemodificeerde array (2088, 17 bytes)
    Dim MacAddress4Offset As Integer = 2155 ' Offset van MAC Adres #4 in de gemodificeerde array (2155, 17 bytes)


    ' Nieuw serienummer
    For i = SerialNumberOffset To SerialNumberOffset + 10
        newbytes(i) = AscW(NewSerialNumber.Text(i - SerialNumberOffset))
    Next

    '' Nieuw artiekelnummer
    For i = ArticleNumberOffset To ArticleNumberOffset + 18
        newbytes(i) = AscW(NewArticleNumber.Text(i - ArticleNumberOffset))
    Next

    ' Nieuw MAC adres #1
    For i = MacAddress1Offset To MacAddress1Offset + 16
        newbytes(i) = AscW(NewMac1TextBox.Text(i - MacAddress1Offset))
    Next
    '' Nieuw MAC adres #2
    For i = MacAddress2Offset To MacAddress2Offset + 16
        newbytes(i) = AscW(NewMac2TextBox.Text(i - MacAddress2Offset))
    Next
    ' Nieuw MAC adres #3
    For i = MacAddress3Offset To MacAddress3Offset + 16
        newbytes(i) = AscW(NewMac3TextBox.Text(i - MacAddress3Offset))
    Next
    ' Nieuw MAC adres #4
    For i = MacAddress4Offset To MacAddress4Offset + 16
        newbytes(i) = AscW(NewMac4TextBox.Text(i - MacAddress4Offset))
    Next


    NewCheckSum.Text = Format(Crc32.ComputeChecksum(newbytes), "X")



    Dim FinalBytes() As Byte

    Dim final2bytes(2559) As Byte




    '     MsgBox("7: " + NewCheckSum.Text(5))
    '    MsgBox("6: " + NewCheckSum.Text(4))
    '   MsgBox((Asc(NewCheckSum.Text(5)) + Asc(NewCheckSum.Text(4))))



    '     Dim byte0 = Convert.ToByte(NewCheckSum.Text(6))
    '    Dim byte1
    '   Dim b

    'MsgBox(
    '                    (Asc(NewCheckSum.Text(1)) + Asc(NewCheckSum.Text(0)))
    '       )
    '     (Asc(NewCheckSum.Text(6)) + Asc(NewCheckSum.Text(7))) +
    '    (Asc(NewCheckSum.Text(5)) + Asc(NewCheckSum.Text(4))) +
    '    (Asc(NewCheckSum.Text(3)) + Asc(NewCheckSum.Text(2))) +

    Dim checksumbytes = MyStringConversions.StringToByteArray(NewCheckSum.Text)
    FinalBytes = {&H80, &H8, &H0, &H0,
    checksumbytes(3), checksumbytes(2), checksumbytes(1), checksumbytes(0)
                 }


    Array.ConstrainedCopy(FinalBytes, 0, final2bytes, 0, 8)
    Array.ConstrainedCopy(newbytes, 0, final2bytes, 8, newbytes.Length)




    '        (Asc(NewCheckSum.Text(6)) + Asc(NewCheckSum.Text(7)) - 36),
    ''       (Asc(NewCheckSum.Text(5)) + Asc(NewCheckSum.Text(4)) - 36),
    '    (Asc(NewCheckSum.Text(3)) + Asc(NewCheckSum.Text(2)) - 103),
    '    (Asc(NewCheckSum.Text(1)) + Asc(NewCheckSum.Text(0)) - 103)
    '    }





    Dim fStream4 As New FileStream("" + LocationOfFirmware.FileName.Remove(FirmwareFileLocation.Length - 3) + "_final.dd", FileMode.OpenOrCreate, FileAccess.Write)

    Dim br4 As New BinaryWriter(fStream4)

    br4.Write(final2bytes)
    br4.Close()



    fStream4.Close()

    '  Dim fStream5 As New FileStream(FirmwareFileLocation.Remove(FirmwareFileLocation.Length - 3) + "_tmp_final1.dd", FileMode.OpenOrCreate, FileAccess.Write)
    '  Dim br5 As New BinaryWriter(fStream5)
    '  br5.Write(FinalBytes)
    '  br5.Close()
    '  fStream5.Close()


    'Dit hoeft pas wanneer de .dd file een goede serienummer heeft gekregen..
    'Process.Start("cmd.exe", "/C" + CopyDataCommandTextbox.Text)
    'Process.Start("cmd.exe", "/C" + WriteDataCommandTextbox.Text)

End Sub

“不获取新文件”不是一个很好的解释。你有例外吗?你得到的文件不是新的吗?你确定代码会执行吗?您确定
FirmwareFileLocation.Remove(FileLocation.Length-3)+“\u tmp\u final.dd”
最终指向的位置吗?您是对的,它没有指向正确的位置,谢谢。然而有些东西仍然不能正常工作,目前它正在创建一个只有3KB的文件。我以为我在读一个比这个大得多的文件,然后编辑整个文件中3KB的部分。是否可以读取整个文件,用br4.Write(final2bytes)代码编辑3KB部分,然后将整个文件写回新位置?您使用的是删除现有文件的。我相信如果你解释一下会更好。我可能有很多问题,这就是为什么我想从这里得到帮助。我现在真的不知道该怎么办了。也许我应该打开一个文件流来读取我当前的数据文件,然后将其写入一个新的文件流,这样我就可以在不更改第一个文件的情况下对其进行编辑,编辑后我想将整个文件保存到一个新的文件名。在你提到Filemode.create之后,我看了一些东西,也许你是在暗示Filemode.OpenOrCreate?嗨,艾格伯特,欢迎来到SO。为了得到好的答案,最好包含更多的代码。。来看看这里,了解更多。。