【问题标题】:System.IO.StreamWriter has no string constructor in .netcore 1.1System.IO.StreamWriter 在 .netcore 1.1 中没有字符串构造函数
【发布时间】:2017-11-09 07:19:57
【问题描述】:

我正在 VS2017 社区版下的 .NET Core V1.1 中迈出第一步。

我将一些代码块移植到了一个使用 System.IO.StreamWriter 的 ASP.NET Core 项目中:

string fileName = "Hello_world.txt";

using (StreamWriter file = new StreamWriter(fileName))
{   
    // do stuff...
}

这样我得到一个编译器错误:

error CS1503: Argument 1: cannot convert from 'string' to 'System.IO.Stream'

另一方面,.NET API 文档明确指出可以使用带有字符串的构造函数,请参阅here

谁能告诉我为什么没有构造函数接收字符串以及在哪里可以找到正确的 API 文档?

【问题讨论】:

  • 看起来你创建了一个 .net core 1.0 项目,据我记得,这个构造函数不可用。会将此作为答案发布,但是,这只是一个猜测,必须先由您自己确认。
  • 如果您查看文档的构造函数部分,您会注意到没有列出 string 构造函数。所有框架的示例都是相同的,因此它们有时包含在所选框架中不起作用的代码。
  • 我认为我最大的问题是找到正确的 API 文档,感谢 Martin Ullrich,我找到了正确的。老实说,由于所有不同的版本,我发现 ASP.NET 令人困惑。至少对于初学者来说。

标签: asp.net constructor .net-core visual-studio-2017 streamwriter


【解决方案1】:

采用字符串参数的 StreamWriter 构造函数仅在 .NET Core 2.0 及更高版本中可用。你可以在https://apisof.net/catalog/System.IO.StreamWriter..ctor(String)查看可用性

同时,您可以创建一个FileStream,它就是what the constructor taking a string does

    string path = "foo.txt";
    using (var stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, 4096, FileOptions.SequentialScan))
    using (var streamWriter = new StreamWriter(stream, System.Text.Encoding.UTF8, 1024, false))
    {
        streamWriter.WriteLine("hey");
    }

【讨论】:

  • 感谢您的回答,尤其是链接。之前没有找到该资源。
【解决方案2】:

您的问题可以通过使用 .NET Framework 项目而不是 .NET Core 项目来解决。

所有 11 个构造函数都应该在 .NET Framework 项目中可用。

这为我解决了问题。

【讨论】:

    【解决方案3】:

    StreamWriter 对象实际上是Stream 对象的包装器。您应该创建一个FileStreamMemoryStream 或其他类型的Stream 并将其传递给StreamWriter 构造函数。

    在 .NET Framework 中,采用字符串的构造函数实际上在后台创建了一个 FileStream

    【讨论】:

      猜你喜欢
      • 2014-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-12
      • 2019-01-21
      • 2014-11-21
      • 2020-04-22
      • 1970-01-01
      相关资源
      最近更新 更多