public static Stream GenerateStreamFromString(string s)
{
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
writer.Write(s);
writer.Flush();
stream.Position = 0;
return stream;
}
别忘了使用:
using (var stream = GenerateStreamFromString("a,b \n c,d"))
{
// ... Do stuff to stream
}
String someStr="This is a Test";
Encoding enc = getEncodingFromSomeWhere();
using (Stream stream = someStr.ToStream(enc))
{
// Do something with the stream....
}
0
我们使用下面列出的扩展方法 . 我认为您应该让开发人员对编码做出决定,因此涉及的魔法较少 .
public static class StringExtensions {
public static Stream ToStream(this string s) {
return s.ToStream(Encoding.UTF8);
}
public static Stream ToStream(this string s, Encoding encoding) {
return new MemoryStream(encoding.GetBytes(s ?? ""));
}
}
12 回答
另一种方案:
将其添加到静态字符串实用程序类:
这会添加一个扩展功能,您可以简单地:
我想你可以从使用MemoryStream中受益 . 您可以使用Encoding class的GetBytes方法填充您获得的字符串字节 .
别忘了使用:
关于
StreamWriter
没有被处置 .StreamWriter
只是基本流的包装器,不使用任何需要处理的资源 .Dispose
方法将关闭StreamWriter
正在写入的基础Stream
. 在这种情况下,我们想要返回MemoryStream
.在.NET 4.5中,现在有一个
StreamWriter
的重载,它在处理器被处理后保持底层流打开,但是这个代码也做同样的事情并且也适用于其他版本的.NET .见Is there any way to close a StreamWriter without closing its BaseStream?
干得好:
在@ JoelNet的回答和@Shaun Bowe回答的评论中提出的扩展方法的略微修改版本 . 因为我同意@Palec的评论 .
String扩展的良好组合:
使用
MemoryStream
类,调用Encoding.GetBytes
首先将字符串转换为字节数组 .你随后在流上需要
TextReader
吗?如果是这样,您可以直接提供StringReader
,并绕过MemoryStream
和Encoding
步骤 .我使用了这样的答案组合:
然后我像这样使用它:
我们使用下面列出的扩展方法 . 我认为您应该让开发人员对编码做出决定,因此涉及的魔法较少 .