Мне нужно написать от Memorystream до простого Filestream. Проблема в том, что мой memystream содержит имя файла и его последовательность байтов, разделенных символом «|». Так что это примерно так: name.extension | BYTES. Код я использую, чтобы написать сейчас:Как я могу написать FileStream из Memorystream, начиная с ненулевой позиции?
Dim j As Integer = 1
Dim name As String
name = ""
ms.Read(temp, 0, 1)
Do While (UTF8.GetString(temp, 0, 1) <> "|")
name += UTF8.GetString(temp, 0, 1)
j += 1
ms.Read(temp, 0, 1)
Loop
Вот как я получаю имя файла и это:
Dim fs As FileStream = File.Create(sf.FileName()) 'SaveFileDialog
ms.Seek(j, SeekOrigin.Begin) 'starting to write after "|" char
Do
ms.Read(temp, 0, 1)
fs.Write(temp, 0, 1)
j += 1
Loop While ms.Length - j <> 0 'YES... byte after byte
fs.Close()
fs.Dispose()
ms.close()
ms.Dispose()
является, как я пишу этот файл. Я знаю, что могут быть вещи, которые могли бы быть написаны лучше, но именно поэтому я прошу вас о помощи. Я попытался использовать MememoryStream.WriteTo (FileStream), но он также начинает писать из имени файла. Можно ли улучшить код? Большое спасибо!
Ваш подход хорош. Возможно, вы захотите увеличить размер буфера от 1, но в противном случае, если он работает, вы должны называть его днем. –
Попробуйте 'ms.CopyTo (fs)' после выполнения 'Seek'. – Mark
@GuillaumeCR Я так и думал, но я должен знать, когда размер буфера превышает количество оставшихся байтов запоминающего устройства. Я прав? – Dadex