텍스트 파일에서 오는 스트림을 취하는 메소드에 대한 단위 테스트를 작성해야합니다. 나는 이런 식으로하고 싶다 :
Stream s = GenerateStreamFromString("a,b \n c,d");
답변
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
}
StreamWriter
처분되지 않는 것에 대해 . StreamWriter
기본 스트림을 감싸는 래퍼 일 뿐이므로 처리해야 할 리소스를 사용하지 않습니다. 이 Dispose
메소드 는 쓰는 기본 Stream
을 닫습니다 StreamWriter
. 이 경우에 MemoryStream
우리 는 돌아 가고자합니다.
.NET 4.5에는 이제 StreamWriter
작성자가 폐기 된 후에 기본 스트림을 열어 두는 과부하 가 있지만이 코드는 동일한 기능을 수행하며 다른 버전의 .NET에서도 작동합니다.
답변
다른 해결책 :
public static MemoryStream GenerateStreamFromString(string value)
{
return new MemoryStream(Encoding.UTF8.GetBytes(value ?? ""));
}
답변
이것을 정적 문자열 유틸리티 클래스에 추가하십시오.
public static Stream ToStream(this string str)
{
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
writer.Write(str);
writer.Flush();
stream.Position = 0;
return stream;
}
확장 기능이 추가되어 간단하게 수행 할 수 있습니다.
using (var stringStream = "My string".ToStream())
{
// use stringStream
}
답변
public Stream GenerateStreamFromString(string s)
{
return new MemoryStream(Encoding.UTF8.GetBytes(s));
}
답변
MemoryStream
클래스를 사용 Encoding.GetBytes
하여 문자열을 먼저 바이트 배열로 변환하십시오.
나중에 TextReader
스트림에 필요 합니까? 그렇다면 StringReader
직접 제공 하고 MemoryStream
및 Encoding
단계를 무시할 수 있습니다.
답변
나는 다음과 같은 답변을 혼합하여 사용했습니다.
public static Stream ToStream(this string str, Encoding enc = null)
{
enc = enc ?? Encoding.UTF8;
return new MemoryStream(enc.GetBytes(str ?? ""));
}
그리고 나는 이것을 다음과 같이 사용합니다 :
String someStr="This is a Test";
Encoding enc = getEncodingFromSomeWhere();
using (Stream stream = someStr.ToStream(enc))
{
// Do something with the stream....
}
답변
아래에 나열된 확장 방법을 사용합니다. 개발자가 인코딩에 대한 결정을 내릴 수 있도록해야하므로 마술이 적습니다.
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 ?? ""));
}
}