Dark Frost Ответов: 2

Как я могу записать шестнадцатеричное значение в файл до тех пор, пока мой байт записи?


Hi How Can ı write "FF" hex value in my file until my write byte ?

for example "if ı write textbox "10" and press button after program write 10 mb ff hex value in my file" like this https://i.stack.imgur.com/FxA1r.png

ı use this code but write 10 mb files only 1 bytes ff value like this https://i.stack.imgur.com/APCAp.png

What I have tried:

<pre lang="vb">        
Dim hex As String = "FF"
    Using fs As New FileStream("huge_dummy_file", FileMode.Create, FileAccess.Write)
        For Each byteHex As String In hex.Split()
            fs.Seek(TextBox1.Text * 1024 * 1024, SeekOrigin.Begin)
            fs.WriteByte(Convert.ToByte(byteHex, 16))
        Next
    End Using

Gerry Schmitz

Что вы будете делать, если наберете неправильный номер и он заполнит ваш диск?

2 Ответов

Рейтинг:
5

OriginalGriff

Просто чтобы обеспечить более простую версию решения Дейва:

Dim array As Byte() = Enumerable.Repeat(CByte(&HFF), 1024 * 1024 * 10).ToArray()
File.WriteAllBytes("D:\Test Data\Big Dummy File.bin", array)


Dark Frost

своя работа :)
спасибо за ваши ответы :)

OriginalGriff

Всегда пожалуйста!

Dark Frost

Могу я задать один вопрос ?
я использую этот код но у меня есть большая проблема :)
если я пишу файл размером 50 Гб этот код выдает ошибку из памяти
как я могу это исправить ?

OriginalGriff

Просто: не пытайтесь писать файлы размером 50 ГБ!
Ни один элемент в .NET не может быть больше 2 ГБ, поэтому вы не можете создать такой большой массив байтов.
Если вы должны создать файлы такого размера (и даже для тестирования 50 ГБ одного и того же значения довольно глупо), то создайте массив 1 ГБ и добавьте его к выходному файлу 50 раз или массив 1 МБ и добавьте его 50 000 раз.

Но лучше всего не создавать его в первую очередь!

Рейтинг:
14

Dave Kreskowiak

Если вы ожидаете, что файл размером 10 МБ будет записан с этим кодом, то это не так. Вы ищете до 10 МБ длины, а затем пишете пару байтов. Вы даже не пишете байты 0xFF. Вы пишете символы "FF", что не одно и то же.

Чтобы записать байты для 0xFF, вы должны записать фактические байты, а не строки. Вы также должны писать их миллионами, а не искать позицию и делать одну операцию записи.

Dim hex As Byte = &HFF

Using fs As New FileStream("file.dat", FileMode.Create, FileAccess.Write)
    For x As Integer = 1 To (10 * 1024 * 1024)
        fs.WriteByte(hex)
    Next
End Using


Dark Frost

спасибо :)