将字符串转换为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中还有这个问题的其他答案,但似乎没有一个是直接解决这个问题的方法]

提前感谢!

将字符串转换为c#中的文件流

首先,将方法更改为允许Stream而不是FileStreamFileStream是一个实现,我记得它不添加任何方法或属性,只实现抽象类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);
                            }
                        }