MemoryStream 没有将预期的所有内容写入文件
MemoryStream is not writing everything expected 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);
}
}
public static void CopyFromStream(Stream stream, string filename)
{
using var fs = File.Open(filename, FileMode.OpenOrCreate);
stream.CopyTo(fs);
}
主要功能:
MemoryStream ms = new();
StreamService.WriteToStream(ms);
ms.Seek(0, SeekOrigin.Begin);
StreamService.CopyFromStream(ms, "database.dat");
但是当我打开文件时,我发现并没有所有的乘客。我需要写100个passangers(根据第一种方法的循环)但是只有87个passangers。文件如下所示:
//some other passangers from 0 to 82, everything is fine with them
83
Passanger83
False
84
Passanger84
False
85
Passanger85
True
86
Passanger86
False
87
Passanger87
T
正如您在文件末尾看到的那样,True
语句被破坏并且此文件中没有足够的乘客。有人可以告诉我问题是什么吗?
P.S。我今天已经在另一个问题中发布了这段代码,但现在我解决了之前的问题。现在我遇到了另一个问题,所以它不是重复的。
尝试在您的 WriteToStream
方法中将 StreamWriter.AutoFlush
属性 设置为 true
:
StreamWriter sw = new(stream) { AutoFlush = true };
并添加手动删除文件(如果存在)以进行正确覆盖:
public static void CopyFromStream(Stream stream, string filename)
{
if (File.Exists(filename))
File.Delete(filename);
using var fs = File.Open(filename, FileMode.OpenOrCreate);
stream.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);
}
}
public static void CopyFromStream(Stream stream, string filename)
{
using var fs = File.Open(filename, FileMode.OpenOrCreate);
stream.CopyTo(fs);
}
主要功能:
MemoryStream ms = new();
StreamService.WriteToStream(ms);
ms.Seek(0, SeekOrigin.Begin);
StreamService.CopyFromStream(ms, "database.dat");
但是当我打开文件时,我发现并没有所有的乘客。我需要写100个passangers(根据第一种方法的循环)但是只有87个passangers。文件如下所示:
//some other passangers from 0 to 82, everything is fine with them
83
Passanger83
False
84
Passanger84
False
85
Passanger85
True
86
Passanger86
False
87
Passanger87
T
正如您在文件末尾看到的那样,True
语句被破坏并且此文件中没有足够的乘客。有人可以告诉我问题是什么吗?
P.S。我今天已经在另一个问题中发布了这段代码,但现在我解决了之前的问题。现在我遇到了另一个问题,所以它不是重复的。
尝试在您的 WriteToStream
方法中将 StreamWriter.AutoFlush
属性 设置为 true
:
StreamWriter sw = new(stream) { AutoFlush = true };
并添加手动删除文件(如果存在)以进行正确覆盖:
public static void CopyFromStream(Stream stream, string filename)
{
if (File.Exists(filename))
File.Delete(filename);
using var fs = File.Open(filename, FileMode.OpenOrCreate);
stream.CopyTo(fs);
}
经过多次迭代测试并运行良好。