我有这个函数在bin文件中写入字节。
Public Shared Function writeFS(path As String, count As Integer) As Integer
Using writer As New BinaryWriter(File.Open(path, FileMode.Open, FileAccess.Write, FileShare.Write), Encoding.ASCII)
Dim x As Integer
Do Until x = count
writer.BaseStream.Seek(0, SeekOrigin.End)
writer.Write(CByte(&HFF))
x += 1
Loop
End Using
Return -1
End Function
我有一个count
值的textBox。 Count是要写入文件的字节数。
问题是,当我想写1mb +时,由于循环,它需要10秒以上。
我需要一种更好/更快的方式在文件FF
次结束时写入十六进制值'value'
。
如果我没有很好地解释,我很抱歉。
答案 0 :(得分:3)
这应该更好:
Public Shared Function writeFS(path As String, count As Integer) As Integer
Using writer As New BinaryWriter(File.Open(path, FileMode.Open, FileAccess.Write, FileShare.Write), Encoding.ASCII)
Dim x As Integer
Dim b as Byte
b = CByte(&HFF)
writer.BaseStream.Seek(0, SeekOrigin.End)
Do Until x = count
writer.Write(b)
x += 1
Loop
End Using
Return -1
End Function
这样你每次都不会打电话给CByte。并且在每次写入后都不需要移动到流的末尾。
答案 1 :(得分:0)
之前的一些问题: 为什么功能共享?为什么使用FileSHARE.Write? WriteShare意味着OTHER进程可以在写入文件时写入该文件。为什么要写出完全相同的单个字节?为什么函数每次都返回-1?可能会更好地适应SUB?为什么不使用简单的for循环呢?
Public Sub writeFS(path As String, count As Integer)
Using Stream As New FileStream("", FileMode.Append, FileAccess.Write, FileShare.Read)
Stream.Write(Enumerable.Repeat(Of Byte)(255, count).ToArray, 0, count)
End Using
End Sub
好的,如果你需要写100MB,这不适合,但你可以分区你的写作。