从 MemoryStream 写入和读取字符串

问题描述 投票:0回答:1

请考虑这种情况:

我想读取一个文件,然后将其字节放入

MemoryStream
,然后向其中写入一些字符串,然后立即读取整个
MemotyStream
。例如,我有一个文本文件,它包含
test
字符串。我写了这段代码:

var allBytes = File.ReadAllBytes(<filePath>);
MemoryStream _mem = new MemoryStream(0);
_mem.Write(allBytes, 0, allBytes.Length);

StreamWriter sw = new StreamWriter(_mem);
sw.WriteLine("This is some text");

_mem.Position = 0;

using (StreamReader sr = new StreamReader(_mem))
{
    while (sr.Peek() >= 0)
    {
        Console.Write((char)sr.Read());
    }
}

运行此代码后,我只得到

test
(文件初始值)字符串,并且
"This is some text"
没有写入流。我怎样才能做到这一点?

谢谢

c# stream memorystream
1个回答
0
投票

运行此代码后,我只得到测试(文件初始值)字符串和 “这是一些文本”没有写入流。我怎样才能做到这一点?

根据您的错误消息,出现您遇到的问题是因为当您使用

MemoryStream
写入
StreamWriter
时,它不会立即将内容刷新到底层流(在本例中为 MemoryStream)。

为了确保数据写入MemoryStream,需要在写入后显式刷新StreamWriter。

您也可以尝试以下方式:

 byte[] allBytes = System.IO.File.ReadAllBytes(filePath);
 using (MemoryStream memStream = new MemoryStream())
 {
     
     memStream.Write(allBytes, 0, allBytes.Length);
     string additionalText = "This is some additional text";
     byte[] additionalBytes = Encoding.UTF8.GetBytes(additionalText);
     memStream.Write(additionalBytes, 0, additionalBytes.Length);

    
     memStream.Position = 0;

     // Read entire MemoryStream as a string
     using (StreamReader sr = new StreamReader(memStream))
     {
         string result = sr.ReadToEnd();
         Console.WriteLine(result);
     }
 }

输出:

enter image description here

注意:我已经使用.NET 8应用程序和asp.net core应用程序进行了测试,两者都按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.