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

値であるtextBoxがありcountます。カウントは、ファイルに書き込むバイト数です。

問題は、1mb以上を書き込みたい場合、サイクルのために10秒以上かかることです。

ファイル時間FFの終わりに16進値を書き込むためのより良い/より速い方法が必要です。'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の方が似合うかも?while の代わりに単純な 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

OK、100MBを書き込む必要がある場合、これは収まりませんが、書き込みを分割することはできます.

于 2012-11-23T22:34:36.660 に答える