将字符串转换为c#中的文件流
本文关键字:文件 字符串 转换 | 更新日期: 2023-09-27 18:24:45
我刚开始写单元测试,现在遇到了这种情况:
我有一个方法,它有一个FileStream对象,我正试图向它传递一个"字符串"。因此,我想将我的字符串转换为FileStream,我正在这样做:
File.WriteAllText(string.Concat(Environment.ExpandEnvironmentVariables("%temp%"),
@"/test.txt"), testFileContent); //writes my string to a temp file!
new FileStream(string.Concat(Environment.ExpandEnvironmentVariables("%temp%"),
@"/test.txt"), FileMode.Open) //open that temp file and uses it as a fileStream!
然后关闭文件!
但是,我想一定有一些非常简单的替代方法可以将字符串转换为fileStream。
欢迎提出建议![注意,在stackoverflow中还有这个问题的其他答案,但似乎没有一个是直接解决这个问题的方法]
提前感谢!
首先,将方法更改为允许Stream
而不是FileStream
。FileStream
是一个实现,我记得它不添加任何方法或属性,只实现抽象类Stream
。然后使用以下代码可以将string
转换为Stream
:
public Stream GenerateStreamFromString(string s)
{
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
writer.Write(s);
writer.Flush();
stream.Position = 0;
return stream;
}
As FileStream类为文件提供流,因此它的构造函数需要文件的路径、模式、权限参数等才能将文件读取到流中,因此它用于将文件中的文本读取到流。如果我们需要先将字符串转换成流,我们需要将字符串转换为字节数组,因为流是一个字节序列。下面是代码。
//Stream is a base class it holds the reference of MemoryStream
Stream stream = new MemoryStream();
String strText = "This is a String that needs to beconvert in stream";
byte[] byteArray = Encoding.UTF8.GetBytes(strText);
stream.Write(byteArray, 0, byteArray.Length);
//set the position at the beginning.
stream.Position = 0;
using (StreamReader sr = new StreamReader(stream))
{
string strData;
while ((strData= sr.ReadLine()) != null)
{
Console.WriteLine(strData);
}
}