2013-04-07 40 views
2

二進制文件,我需要創建一個文件,該文件包含二進制輸入,但是當我這樣做,如果我想補充的二進制表示「蘋果」它採取的字節不位寫作位到VB.Net

例如 它寫入文件0110000101110000011100000110110001100101它包含40位 然而,當我看着它顯示40bytes的文件,因爲它需要每一位作爲字符,因此它保存爲按字節。 我該如何防止這種情況並在VB.net中按位保存所有信息?

Dim fs As New FileStream("\binfile.bin", FileMode.Append) 
    Dim bw As New BinaryWriter(fs) 
    Dim TempStr As String 

    For t As Integer = 0 To Nameoftable.Length - 1 
     Dim bin As String = _ 
      LongToBinary(Asc(Nameoftable.Substring(t, 1))) 'BIT CONVERTER FUNCTION 
     TempStr &= bin.Substring(bin.Length - 8) 
    Next t 

     bw.Write(TempStr) 

    bw.Close() 

非常感謝......

+0

好了,不要用LongToBinary()。目前尚不清楚你爲什麼這麼做。如果你想要字節,那麼StreamWriter將工作得很好。 – 2013-04-07 20:46:37

+0

我使用LongToBinary函數,因爲我需要將數據保存爲二進制文件,因爲在記錄的某些部分中,我使用散列和所需的比特位部分。例如,我需要數據的第一位狀態,並且在此類情形中的其餘數據我需要逐位記錄..真正的問題,即使我將所有字符串,整數變成二進制格式,它寫入.bin文件中的字符..我怎麼能防止這種情況? – Palindrom 2013-04-07 21:10:43

+0

此外,我只是嘗試streamwriter,這幾乎與mycase的二進制相同..我需要寫位比..例如,如果我添加到bin文件中的5位,它必須增長5位而不是5個字節.. – Palindrom 2013-04-07 21:12:52

回答

1

您必須使用二進制讀/寫器對象,並同時指定字段類型的數據發送到寫流和同樣的數據被讀取從流中讀者。

Dim filename As String = "c:\temp\binfile.bin" 
Dim writer As BinaryWriter 
Dim reader As BinaryReader 
Dim tmpStringData As String 
Dim tmpByteData As Byte 
Dim tmpCharData As Char 
Dim tempIntData as Integer 
Dim tempBoolData as Boolean 
' 
writer = New BinaryWriter(File.Open(filename, FileMode.Append)) 
Using writer 
    writer.Write("apple") 
    'writer.Write(YourByteDataHere) 'byte 
    'writer.Write(YourCharHere) 'char 
    'writer.Write(1.31459)  'single 
    'writer.Write(100)  'integer 
    'writer.Write(False)  'boolean 
End Using 
writer.Close() 
' 
If (File.Exists(filename)) Then 
    reader = New BinaryReader(File.Open(filename, FileMode.Open)) 
    Using reader 
    tmpStringData = reader.ReadString() 
    'tempByteData = reader.ReadByte() 
    'tempCharData = reader.ReadChar() 
    'tempSingleData = reader.ReadSingle() 
    'tempIntData = reader.ReadInt32() 
    'tempBoolData = reader.ReadBoolean() 
    End Using 
    reader.Close() 
End If 

我用ReadString()方法寫入字符串「蘋果」 ,如果你願意,你可以使用CHR代碼字符或字節,在這種情況下,你必須使用ReadByte()或ReadChar()或ReadInt()取決於你如何將它發送到流(作爲一個字節,字符或整數)

所以文件大小爲6字節1爲由文件流處理程序自己內部使用,5爲您的'蘋果'

如果你將它保存爲字符或字節,我會認爲它使用了5個字節,長度爲1k 如果你將它保存爲整數,我會想用它的10個字節,1K長

參考:http://msdn.microsoft.com/en-us/library/system.io.binarywriter.aspx