MemoryStream 没有向文件写入任何内容

MemoryStream is not writing anything to the file

我的问题是将一些有关乘客的数据写入MemoryStream,然后将其复制到文件中。我需要用两种不同的方法来实现它。在方法中我需要使用 Stream,然后在 Main 函数中我使用 MemoryStream。所以我写了这段代码:

    public static void WriteToStream(Stream stream)
    {
        Random rnd = new();
        StreamWriter sw = new(stream);

        for (int i = 0; i < 100; i++)
        {
            sw.WriteLine(i);
            sw.WriteLine($"Passanger{i}");
            sw.WriteLine(rnd.Next(0, 2) == 1); //true or false
        }
    }

    public static void CopyFromStream(Stream stream, string filename)
    {
        StreamReader sr = new(stream);
        StreamWriter sw = new(File.Open(filename, FileMode.OpenOrCreate));
        while (sr.BaseStream.Position < sr.BaseStream.Length)
        {
            sw.WriteLine(sr.ReadLine());
        }
        sw.Close();
    }

主要功能:

MemoryStream ms = new();

StreamService.WriteToStream(ms);
StreamService.CopyFromStream(ms, "database.dat");

第一种方法是将一些关于passangers的数据写入流,另一种方法是读取它并将其写入文件。但是当我检查我的文件时,它是空的。可能是什么问题?

写入MemoryStream后,Position就在最后。您需要将位置设置回开头:

WriteToStream(ms);
ms.Seek(0, SeekOrigin.Begin); // < here
CopyFromStream(ms, "database.dat");

另外,Stream class 已经有了 CopyTo 方法,所以没有必要重新发明它(除非你使用的是一些非常旧的框架版本,它不可用?) :

WriteToStream(ms);
ms.Seek(0, SeekOrigin.Begin); // < here
using (var fs = File.Open("database.dat", FileMode.OpenOrCreate)) {
    ms.CopyTo(fs);
}