在.NET中如何将字符串用作流?

6

我需要调用一个接受流参数的方法。该方法会将文本加载到流中,通常是文件。我希望只是填充一个字符串,而不是将其写入文件,以获取流的内容。我该怎么做?

5个回答

7
使用MemoryStream和StreamReader。类似这样的代码:
using (MemoryStream ms = new MemoryStream())
using (StreamReader sr = new StreamReader(ms))
{
   // pass the memory stream to method
   ms.Seek(0, SeekOrigin.Begin); // added from itsmatt
   string s = sr.ReadToEnd();
}

可能需要提醒一下,在使用流进行读取之前,您需要将其倒回。 :) - Nick Johnson

5
使用StringWriter作为流并输出到字符串中:
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
CallYourMethodWhichWritesToYourStream(sw);
return sb.ToString();

StringWriter是TextWriter类型,而不是Stream类型,因此它不能传递给期望Stream的方法。 - Nick Johnson

2

查找MemoryStream类


2
MemoryStream ms = new MemoryStream();
YourFunc(ms);
ms.Seek(0, SeekOrigin.Begin);
StreamReader sr = new StreamReader(ms);
string mystring = sr.ReadToEnd();

这是其中一种方法。


哦,之前没有看到Bryant的回复 - 基本上是相同的东西。好吧,如果你添加寻找调用,他的方法也可以工作。 - itsmatt
这段代码实际上是有效的。将其与Bryant更好格式化的响应合并将是很棒的,但我还没有足够的声望来做到这一点... - JoshL

0

你可以这样做:

string s = "Wahoo!";
int n = 452;

using( Stream stream = new MemoryStream() ) {
  // Write to the stream

  byte[] bytes1 = UnicodeEncoding.Unicode.GetBytes(s);
  byte[] bytes2 = BitConverter.GetBytes(n);
  stream.Write(bytes1, 0, bytes1.Length);
  stream.Write(bytes2, 0, bytes2.Length);

或者你可以直接从bytes1[]数组构造MemoryStream。 - Nick Johnson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接