VB2008更改文件中的字符串

时间:2015-07-25 17:26:51

标签: vb.net

我想在已编译的游戏文件中更改某些内容,因此我使用了以下代码:

Private Sub Next2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Next2.Click
    Dim reader As New System.IO.StreamReader("Languages/" & Language & ".Devil")
    Dim allLines As List(Of String) = New List(Of String)
    Do While Not reader.EndOfStream
        allLines.Add(reader.ReadLine())
    Loop
    reader.Close()
    Tips.Text = ReadLine(6, allLines)
    WeaponsListBox.Hide()
    NewWeaponsList.Hide()
    Next2.Hide()
    Dim curItem As String = WeaponsListBox.SelectedItem.ToString()
    Dim curItem2 As String = NewWeaponsList.SelectedItem.ToString()
    Try
        If MainWeapon = "Cheytac" Then
            Dim supahotfire As String = curItem.Substring(0, 12)
            Dim hotdestroyer As String = curItem.Replace(supahotfire, "")
            Dim supa2 As String = curItem2.Substring(0, 12)
            Dim hot2 As String = curItem2.Replace(supa2, "")
            Dim oldfile As String = "pack/Weapon_" & curItem & ".i3pack"
            Dim FileName As String = "pack/pack_" & MainWeapon & hot2 & "_" & hotdestroyer & ".i3pack"
            Dim be = My.Computer.FileSystem.ReadAllBytes(oldfile)
            Dim be2 As String = UnicodeBytesToString(be)
            be2.Replace("Weapon\" & curItem & "/" & curItem & "_diff", "Weapon\" & curItem2 & "/" & curItem2 & "_diff")
            Dim be3 As String = be2.Replace("Weapon\" & curItem & "/Cheytac_M200_Diff.i3i", "Weapon\" & curItem2 & "/Cheytac_M200_Diff.i3i")
            Dim be4 = UnicodeStringToBytes(be3)
            My.Computer.FileSystem.WriteAllBytes(FileName, be4, True)
            'System.IO.File.AppendAllText(FileName, be4)
            ' Dim fs As FileStream = New FileStream(oldfile, FileMode.Open)
            ' Dim br As BinaryReader = New BinaryReader(fs)
            'Dim bin as byte[]= br.ReadBytes(Convert.ToInt32(fs.Length));
            ' fs.Close()
            'br.Close()
        End If
    Catch ex As Exception
        System.IO.File.AppendAllText("MathimaticalErrors.txt", ex.ToString)
    End Try
End Sub
Public Function UnicodeBytesToString(ByVal bytes() As Byte) As String
    Return System.Text.Encoding.Unicode.GetString(bytes)
End Function
Public Function UnicodeStringToBytes(ByVal str As String) As Byte()
    Return System.Text.Encoding.Unicode.GetBytes(str)
End Function

问题是新创建的文件与旧文件基本相同,并且没有任何变化。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

在代码中的这一点:

Dim be2 As String = UnicodeBytesToString(be)
be2.Replace("Weapon\" & curItem & "/" & curItem & "_diff", "Weapon\" & curItem2 & "/" & curItem2 & "_diff")

be2中的值将保持不变。您必须存储Replace()的返回值:

Dim be2 As String = UnicodeBytesToString(be)
be2 = be2.Replace("Weapon\" & curItem & "/" & curItem & "_diff", "Weapon\" & curItem2 & "/" & curItem2 & "_diff")

此外,在这一行:

My.Computer.FileSystem.WriteAllBytes(FileName, be4, True)

结尾处的True表示您希望追加字节。如果文件为空,这没关系。如果没有,那么每次最终都会将字节添加到文件末尾。不确定这是否是你想要的结果......