7

刚开始编写单元测试,我现在被这种情况阻止了:

我有一个具有 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!

然后关闭文件!

但是,我想必须有一些非常简单的替代方法将字符串转换为文件流。

欢迎提出建议![注意在stackoverflow中这个问题还有其他答案,但似乎没有一个是直接的解决方案]

提前致谢!

4

2 回答 2

18

首先将您的方法更改为允许Stream而不是FileStream. FileStream我记得是一个实现,它不添加任何方法或属性,只实现抽象类Stream。然后使用下面的代码,您可以转换stringStream

public Stream GenerateStreamFromString(string s)
{
    MemoryStream stream = new MemoryStream();
    StreamWriter writer = new StreamWriter(stream);
    writer.Write(s);
    writer.Flush();
    stream.Position = 0;
    return stream;
}
于 2013-07-24T11:49:50.907 回答
1

由于 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);
                            }
                        }
于 2016-08-21T06:03:13.697 回答