Xan*_*ham 9 c# memorystream stream
在我的程序中,我基本上是在读取文件,对其进行一些处理,然后将其作为内存流传递回主程序,这将由流读取器处理.这将全部由我的主要旁边的班级处理.
问题是,当我从另一个类中的my方法返回内存流时,"canread"变量设置为false,从而导致streamreader初始化失败.
下面是一个问题发生的例子(虽然在这里我写的是另一个类中的内存流,但是当我传回它时仍然会导致相同的错误.
在名为"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;
}
}
Run Code Online (Sandbox Code Playgroud)
函数调用主程序:
MemoryStream MStream = Otherclass.ImportantStreamManipulator();
StreamReader reader = new StreamReader(MStream);
Run Code Online (Sandbox Code Playgroud)
当我在"返回MemStream"上放置一个断点时,"CanRead"属性仍然设置为true.一旦我执行它返回到我的main函数,并将返回的值写入MStream,"CanRead"属性设置为false.然后,这会在StreamReader中导致异常,表示无法读取MStream(如指示的属性).数据应该在流缓冲区中,但我无法理解它.
如何设置它以便"CanRead"在返回主体后报告为真?或者我误解了MemoryStream的工作方式以及如何完成我想做的事情?
Jon*_*eet 25
这就是问题:
using (writer)
{
//Code that writes stuff to the memorystream via streamwriter
return MemStream;
}
Run Code Online (Sandbox Code Playgroud)
你关闭了作家,关闭了MemoryStream.在这种情况下,您不希望这样做...虽然您确实需要刷新编写器,然后回放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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8644 次 |
| 最近记录: |