fea*_*net 60 .net c# file-io memorystream stream
我有以下构造方法MemoryStream
从文件路径打开一个:
MemoryStream _ms;
public MyClass(string filePath)
{
byte[] docBytes = File.ReadAllBytes(filePath);
_ms = new MemoryStream();
_ms.Write(docBytes, 0, docBytes.Length);
}
Run Code Online (Sandbox Code Playgroud)
我需要更改它以接受Stream
而不是文件路径.什么是最简单/最有效的方法来MemoryStream
从Stream
对象获取?
Phi*_*ney 185
在.NET 4中,您可以使用Stream.CopyTo复制流,而不是其他答案中列出的home-brew方法.
MemoryStream _ms;
public MyClass(Stream sourceStream)
_ms = new MemoryStream();
sourceStream.CopyTo(_ms);
}
Run Code Online (Sandbox Code Playgroud)
小智 45
用这个:
var memoryStream = new MemoryStream();
stream.CopyTo(memoryStream);
Run Code Online (Sandbox Code Playgroud)
这将转换Stream
为MemoryStream
.
Jus*_*ner 28
如果您要修改类以接受Stream而不是文件名,请不要费心转换为MemoryStream.让底层Stream处理操作:
public class MyClass
{
Stream _s;
public MyClass(Stream s) { _s = s; }
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您确实需要MemoryStream进行内部操作,则必须将源Stream中的数据复制到MemoryStream中:
public MyClass(Stream stream)
{
_ms = new MemoryStream();
CopyStream(stream, _ms);
}
// Merged From linked CopyStream below and Jon Skeet's ReadFully example
public static void CopyStream(Stream input, Stream output)
{
byte[] buffer = new byte[16*1024];
int read;
while((read = input.Read (buffer, 0, buffer.Length)) > 0)
{
output.Write (buffer, 0, read);
}
}
Run Code Online (Sandbox Code Playgroud)
你可以简单地做:
var ms = new MemoryStream(File.ReadAllBytes(filePath));
Run Code Online (Sandbox Code Playgroud)
流位置为 0 并准备使用。