【问题标题】:How to create a TextWriter from FileStream如何从 FileStream 创建 TextWriter
【发布时间】:2018-05-17 00:30:14
【问题描述】:

Newtonsoft.Json 需要 TextWriter 才能创建 JsonTextWriter 的实例,并且它需要由多个类共享。我正在尝试为当天决定运行的所有测试重复使用相同的结果实例。

因此,稍后我在编写测试结果时需要在代码中使用 JsonTextWriter 实例。

由于可共享性,我需要找到一种方法来打开现有文本文件并将其分配一个 FileStream 并将其放入 TextWriter,这样我就可以创建我的 JsonTextWriter。

但是如何使用 FileStream 创建 TextWriter 的实例?

当我尝试创建一个新的 TextWriter 时,我收到错误,它是一个抽象类。

当我尝试使用 File.OpenText(path) 时,我无法将文件设置为 FileShare.ReadWrite。

这是我目前所拥有的:

private void InitializeJSONResultWriter()
{
    string methodName = Utils.getCurrentMethod();
    Log("In:  " + methodName);
    if (textWriter == null)
    {
        //textWriter = File.CreateText(ResultsPath);
        FileStream strm = File.Open(ResultsPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
        TextWriter textWriter = File.CreateText(ResultsPath);

        // ? ugh

        _jsonTextWriter = new JsonTextWriter(textWriter);
    }
}

【问题讨论】:

    标签: c# json


    【解决方案1】:

    TextWriter 是一个抽象类,你可以使用继承自它的StreamWriter

    using (var stream = File.Open("somefile", FileMode.CreateNew))
    {
        using (var sw = new StreamWriter(stream))
        {
            using (var jw = new JsonTextWriter(sw))
            {
                jw.WriteRaw("{}");
            }
        }
    }
    

    【讨论】:

    • 然后我是否将 StreamWriter 转换为 TextWriter 以满足 Newtonsoft.Json 的要求?
    • 你不需要转换成TextWriterStreamWriter继承自那个,你可以直接使用它,看更新
    • 我没有看到重新打开 JsonTextWriter 的方法。每次需要对结果文件执行写操作时,是否必须创建一个新的 JsonTextWriter?
    猜你喜欢
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 2010-11-03
    • 2016-02-12
    • 1970-01-01
    相关资源
    最近更新 更多