0

我有这个函数可以在 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值。Count 是要写入文件的字节数。

问题是当我想写 1mb+ 时,由于循环需要 10+ 秒。

我需要一种更好/更快的方法来在文件时间FF结束时写入十六进制值。'value'

如果我没有很好地解释,我很抱歉。

4

2 回答 2

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。并且无需在每次写入后移动到流的末尾。

于 2012-11-23T20:08:17.993 回答
0

之前的一些问题:为什么要共享函数?为什么使用 FileSHARE.Write?WriteShare 意味着其他进程可以写入文件,而您写入文件。为什么你写的都是一样的单个字节?为什么函数每次都返回-1?可能更适合使用 SUB?为什么不使用简单的 for 循环来代替 while?

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,这不合适,但您可以对写入进行分区。

于 2012-11-23T22:34:36.660 回答