【问题标题】:Convert string to filestream in c#在c#中将字符串转换为文件流
【发布时间】:2013-07-24 11:45:39
【问题描述】:

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

我有一个方法,它有一个 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 中,这个问题还有其他答案,但似乎没有一个是直接的解决方案]

提前致谢!

【问题讨论】:

    标签: c# .net visual-studio-2010 .net-4.0 filestream


    【解决方案1】:

    首先更改您的方法以允许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;
    }
    

    【讨论】:

    • 问题是我无法更改代码。这是一个已经编译好的库,我没有源代码!
    • 所以用你自己的类覆盖FileStream
    • 你将不得不像其他人提到的那样模拟文件流
    • @nowhewhomustnotbenamed。您说这是用于单元测试;为什么要对无法更改的方法进行单元测试?
    • @RowlandShaw 以确保其他人制作的方法按预期工作。
    【解决方案2】:

    由于 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);
                                }
                            }
    

    【讨论】:

      猜你喜欢
      • 2019-02-18
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 2014-06-25
      相关资源
      最近更新 更多