本示例闡釋二進(jìn)制文件的基本輸入和輸出(使用 BinaryReader、BinaryWriter 和 FileStream 類(lèi)。 在如何創(chuàng)建日志文件標(biāo)題下面有一個(gè)類(lèi)似的主題。讀寫(xiě)二進(jìn)制信息使您可以創(chuàng)建和使用通過(guò)其他輸入和輸出方法無(wú)法訪問(wèn)的文件。本示例還展示寫(xiě)入非字符串?dāng)?shù)據(jù),并展示二進(jìn)制 I/O 的功能。
為合江等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及合江網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、合江網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
盡管計(jì)算機(jī)上的文件可以不同的類(lèi)型和文件存儲(chǔ),但是,二進(jìn)制格式是文件的較常用格式之一。此處對(duì)創(chuàng)建二進(jìn)制文件的簡(jiǎn)短介紹使用基類(lèi) BinaryReader 和 BinaryWriter 從文件獲取信息,并將信息放入文件。這些類(lèi)中的每個(gè)類(lèi)均封裝一個(gè)信息流,因此,在進(jìn)一步操作之前,需要?jiǎng)?chuàng)建一個(gè)可用于來(lái)回寫(xiě)信息的流。因?yàn)橐獎(jiǎng)?chuàng)建文件,所以可使用 FileStream 來(lái)公開(kāi)特定文件,在此情況下,如果該文件已存在,則可以修改該文件,或者如果該文件尚不存在,則可以創(chuàng)建該文件。在有 FileStream 之后,可以使用它來(lái)構(gòu)造 BinaryReader 和 BinaryWriter
在讀入信息之后,可以對(duì)信息進(jìn)行所需的任何操作。但是,在某些時(shí)候,您可能想要將信息寫(xiě)回文件,因此需要 BinaryWriter。在本示例中,您將使用 Seek 方法將信息追加到文件結(jié)尾,因此,在開(kāi)始寫(xiě)入之前,請(qǐng)確保指向文件的指針位于文件結(jié)尾。在使用 BinaryWriter 寫(xiě)入信息時(shí)有多個(gè)選項(xiàng)。因?yàn)?Write 方法有足夠的重載用于您能夠?qū)懭氲乃行畔㈩?lèi)型,所以,可以使用 Write 方法向您的編寫(xiě)器封裝的流寫(xiě)入任何標(biāo)準(zhǔn)形式的信息。本情況下,還可以使用 WriteString 方法向流中寫(xiě)入長(zhǎng)度預(yù)先固定的字符串。
VB Source: VB\ReadWrite.aspx
%@ Import Namespace="System.Text" %
%@ Import Namespace="System.IO" %
script language="VB" runat=server
Class TestBinary
Public Shared Function ReadFile(selection As String) As String
Dim output As StringBuilder = New StringBuilder()
Dim fs As FileStream = New FileStream("data.bin", FileMode.OpenOrCreate)
Dim r As BinaryReader = New BinaryReader(fs)
Try
r.BaseStream.Seek(0,SeekOrigin.Begin) ' 將文件指針設(shè)置到文件開(kāi)始
' 因?yàn)椴煌瑪?shù)據(jù)類(lèi)型之間的很多轉(zhuǎn)換結(jié)果都是不可解釋的,
' 所以當(dāng)在其他類(lèi)型與二進(jìn)制數(shù)據(jù)之間進(jìn)行轉(zhuǎn)換時(shí),
' 必須捕捉可能引發(fā)的任何潛在的異常...
' 能夠正確讀取數(shù)據(jù)依賴于如何寫(xiě)入信息...
' 這與寫(xiě)日志文件時(shí)不同。
Do While r.BaseStream.Position r.BaseStream.Length ' 當(dāng)未到達(dá)文件結(jié)尾時(shí)
Select Case selection
Case "Boolean"
output.Append( r.ReadBoolean().ToString() )
Case "String"
output.Append( r.ReadString() )
Case "Integer"
output.Append( r.ReadInt32().ToString() )
End Select
Loop
Finally
fs.Close()
End Try
return output.ToString()
End Function
Public Shared Function WriteFile(output As Object, selection As String) As String
Dim fs As FileStream = New FileStream("data.bin", FileMode.Create)
Dim w As BinaryWriter = New BinaryWriter(fs)
Dim strOutput As String = ""
w.BaseStream.Seek(0, SeekOrigin.End) ' 將文件指針設(shè)置到文件結(jié)尾
' 因?yàn)檎趯?xiě)的信息可能不適合于所選擇用于寫(xiě)入的特定樣式
' (例如,單詞“Hello”作為整數(shù)?),所以我們必須捕捉寫(xiě)入
' 錯(cuò)誤,并通知用戶未能執(zhí)行該任務(wù)
Try
Select Case selection
Case "Boolean"
Dim b As Boolean = Convert.ToBoolean(output)
w.Write( b )
Case "String"
Dim s As String = Convert.ToString(output)
w.Write( s )
Case "Integer"
Dim i As Int32 = Convert.ToInt32(output)
w.Write(i)
End Select
Catch E As Exception
' 讓用戶知道未能寫(xiě)入該信息
strOutput = "寫(xiě)異常:" chr(13) _
"無(wú)法以所請(qǐng)求的格式寫(xiě)入要寫(xiě)入的信息。" _
chr(13) "請(qǐng)輸入嘗試寫(xiě)入的數(shù)據(jù)類(lèi)型的有效值"
End Try
fs.Close()
return strOutput
End Function
End Class
Sub btnAction_Click(src As Object, E As EventArgs)
Dim s As String = ""
' 寫(xiě)出文件
s = TestBinary.WriteFile(txtInput.Text, lstDataIn.SelectedItem.Text)
If s = "" Then
Try
' 讀回信息,顯示信息...
txtOutput.Text = TestBinary.ReadFile(lstDataIn.SelectedItem.Text)
Catch Exc As Exception
' 讓用戶知道未能寫(xiě)入信息
s = "讀異常:" chr(13) _
"無(wú)法以所請(qǐng)求的格式讀取要寫(xiě)入的信息。" _
chr(13) "請(qǐng)輸入嘗試寫(xiě)入的數(shù)據(jù)類(lèi)型的有效值"
End Try
Else
txtOutput.Text = s
End If
End Sub
/script
html
head
link rel="stylesheet" href="intro.css"
/head
body style="background-color:f6e4c6"
form method=post runat="server"
p
table
tr
tdb
下面的示例使用 BinaryWriter 對(duì)象創(chuàng)建一個(gè)二進(jìn)制文件,然后使用 BinaryReader 讀取該信息。/b可以選擇不同的對(duì)象來(lái)將所需的信息寫(xiě)入文件
此演示用于強(qiáng)調(diào)您需要知道如何讀取已寫(xiě)入的二進(jìn)制文件。一旦以某種格式寫(xiě)入數(shù)據(jù),就只能以該格式讀取該信息。但是,可以將多種不同的數(shù)據(jù)類(lèi)型寫(xiě)入文件。在此演示中,輸入任意字符串并將它們作為字符串讀取,對(duì)于整型,僅輸入整型數(shù)值項(xiàng)(試試浮點(diǎn)數(shù)字,然后看看會(huì)發(fā)生什么...);對(duì)于布爾型項(xiàng),僅輸入詞“false”和“true”。
p
hr
/td
/tr
/table
asp:Table id="basetable" runat="server" border="0" cellspacing="0" cellpadding="5"
asp:tablerow
asp:tablecell verticalalign="top"
請(qǐng)選擇要保存到二進(jìn)制文件的數(shù)據(jù)類(lèi)型...
/asp:tablecell
asp:tablecell verticalalign="top"
asp:listbox id="lstDataIn" runat="server"
asp:listitemBoolean/asp:listitem
asp:listitem selected="true"String/asp:listitem
asp:listitemInteger/asp:listitem
/asp:listbox
/asp:tablecell
asp:tablecell verticalalign="top"
asp:button id="btnAction" onclick="btnAction_Click" Text="寫(xiě)入/讀取文件" runat="server"/
/asp:tablecell
/asp:tablerow
在程序目錄下生成log目錄,用于保存日志文件。
自動(dòng)在log目錄中,生成日志文件,文件命名用年月日定義,如20100119_log.log。
在日志文件中,每行記錄一個(gè)時(shí)間點(diǎn)的運(yùn)行內(nèi)容,時(shí)間點(diǎn)的精度應(yīng)該達(dá)到毫秒。
Dim sw As StreamWriter = New StreamWriter(“c:\xxxxx.log”, True) 'true是指以追加的方式打開(kāi)指定文件
For i = 0 To j
temp = i.ToString
sw.WriteLine(temp)
sw.Flush()
Next
sw.Close()
sw = Nothing