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);
}
我的问题是将一些有关乘客的数据写入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);
}