在我的程序中,我基本上是读取一个文件,对其进行一些处理,然后将其作为内存流传递回主程序,该内存流将由流读取器处理。这一切都将由我的 main 旁边的一个类来处理。
问题是,当我从另一个类中的方法返回内存流时,“canread”变量设置为 false,从而导致流读取器初始化失败。
下面是发生问题的示例(虽然在这里我正在写入另一个类中的内存流,但当我将其传回时,它仍然会导致相同的错误。
在名为“Otherclass”的类中:
public static MemoryStream ImportantStreamManipulator()
{
MemoryStream MemStream = new MemoryStream();
StreamWriter writer = new StreamWriter(MemStream);
using (writer)
{
//Code that writes stuff to the memorystream via streamwriter
return MemStream;
}
}
该函数在主程序中调用:
MemoryStream MStream = Otherclass.ImportantStreamManipulator();
StreamReader reader = new StreamReader(MStream);
当我在“return MemStream”上放置断点时,“CanRead”属性仍然设置为 true。一旦我返回主函数并将返回值写入 MStream,“CanRead”属性就会设置为 false。然后,这会导致 StreamReader 中出现异常,表示无法读取 MStream(如属性所示)。数据应该在流缓冲区中,但我就是无法将其取出。
如何设置它以便“CanRead”返回到我的主目录后将报告 true?或者我是否误解了 MemoryStream 的工作原理以及如何完成我想做的事情?
这就是问题:
using (writer)
{
//Code that writes stuff to the memorystream via streamwriter
return MemStream;
}
你关闭了 writer,这也关闭了MemoryStream
。在这种情况下,你不想这样做......尽管你确实需要这样做flush作者,然后倒回MemoryStream
。只需将您的代码更改为:
public static MemoryStream ImportantStreamManipulator()
{
// Probably add a comment here stating that the lack of using statements
// is deliberate.
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
// Code that writes stuff to the memorystream via streamwriter
writer.Flush();
stream.Position = 0;
return stream;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)