【问题标题】:How to write to a file in .NET Core?如何在 .NET Core 中写入文件?
【发布时间】:2016-02-10 08:27:25
【问题描述】:

我想使用 .NET Core 中的蓝牙 LE 功能(特别是 BluetoothLEAdvertisementWatcher)来编写一个将信息记录到文件中的扫描器。这是作为桌面应用程序运行,最好作为命令行应用程序运行。

显然,像 System.IO.StreamWriter(string) 这样的构造函数不可用。如何创建文件并写入文件?

我很高兴能够执行 System.Console.WriteLine(string) 但这似乎在 .NET Core 下也不可用。

更新:澄清一下,如果我能有一个看起来像这样运行且没有错误的程序,我将参加比赛。

using System;
using Windows.Devices.Bluetooth.Advertisement;

namespace ConsoleApplication
{
    public class Program
    {
        public static void Main(string[] args)
        {
            BluetoothLEAdvertisementWatcher watcher = new BluetoothLEAdvertisementWatcher();
            Console.WriteLine("Hello, world!");
        }
    }
}

更新 2:这是 project.json 文件:

{
  "dependencies": {
    "Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0"
  },
  "frameworks": {
    "uap10.0": {}
  },
  "runtimes": {
    "win10-arm": {},
    "win10-arm-aot": {},
    "win10-x86": {},
    "win10-x86-aot": {},
    "win10-x64": {},
    "win10-x64-aot": {}
  }
}

dotnet -v run 命令的输出包含以下错误消息:

W:\src\dotnet_helloworld>dotnet -v run
...
W:\src\dotnet_helloworld\Program.cs(2,15): error CS0234: The type or namespace name 'Devices' does not exist in the namespace 'Windows' (are you missing an assembly reference?)
...

【问题讨论】:

  • 它和你需要为 WinRT 做的一样吗? blog.jerrynixon.com/2012/06/…
  • 可以分享一下project.json文件吗?您可能缺少一些包引用。
  • @VictorHurdugaci 我已编辑问题以包含我尝试过的 project.json 文件之一,以及产生的错误消息。毫无疑问,参考文献是错误的,我在这里有点失明。这个特定的 project.json 取自 .NET Core 项目的 Visual Studio 2015 项目模板。

标签: c# .net bluetooth coreclr


【解决方案1】:

这段代码是我提出问题时一直在寻找的骨架。它仅使用 .NET Core 中可用的工具。

var watcher = new BluetoothLEAdvertisementWatcher();

var logPath = System.IO.Path.GetTempFileName();
var logFile = System.IO.File.Create(logPath);
var logWriter = new System.IO.StreamWriter(logFile);
logWriter.WriteLine("Log message");
logWriter.Dispose();

【讨论】:

  • 效果很好。我猜在大约六个月后,这将有数百个赞成票。
【解决方案2】:

这是我正在使用的解决方案。它使用更少的代码行并且同样出色地完成工作。它也非常兼容 .NET core 2.0

using (StreamWriter writer = System.IO.File.AppendText("logfile.txt"))
{
    writer.WriteLine("log message");
}

【讨论】:

  • 如果要替换文字,请使用System.IO.File.CreateText而不是System.IO.File.AppendText
【解决方案3】:

更好:

using System.IO;

var logPath = Path.GetTempFileName();
using (var writer = File.CreateText(logPath))
{
    writer.WriteLine("log message"); //or .Write(), if you wish
}

【讨论】:

    【解决方案4】:

    截至今天,使用 RTM,似乎也有这种更短的方式:

    var watcher = new BluetoothLEAdvertisementWatcher();
    
    var logPath = System.IO.Path.GetTempFileName();
    var logWriter = System.IO.File.CreateText(logPath);
    logWriter.WriteLine("Log message");
    logWriter.Dispose();
    

    【讨论】:

      【解决方案5】:

      您可以使用corefx git 存储库获取 System.IO 引用。这将使您正在寻找的 StreamWrite(string) 构造函数可用。

      此存储库还将为您提供您正在寻找的 Console.WriteLine(string) 函数。

      【讨论】:

      • 听起来不错,但我还是卡住了。我已经安装并构建了 CoreFX。怎么办?我是否将其作为参考添加到 Visual Studio 项目中?我是否使用dotnet 命令准备和运行我的程序?我在我原来的问题中添加了一个代码 sn-p,以阐明我想要完成的第一步。
      • 一旦构建完成,您需要将其添加为参考,是的,然后您将能够通过在文件顶部添加 using 来包含 System.IO 库using System.IO;跨度>
      • 可能有办法做到这一点,但我所做的每一次尝试都包含对 CoreFX 的引用都与 .NET Core 冲突。
      【解决方案6】:

      这是一个异步 FileWriter 类。

      using System.IO;
      public static class AsyncFileWriter
      {
          public static async Task WriteToFile(string content)
          {
              var logPath = @"SOME_PATH\log.txt";
              using (var writer = File.CreateText(logPath))
              {
                  await writer.WriteLineAsync(content); 
              }
          }
      }
      

      【讨论】:

        【解决方案7】:

        要在 .NET Core 中写入文件,可以使用两种方法:

        1. AppendText()
        2. CreateText()

        这两个方法是System.IO 命名空间中File 类的静态成员。它们之间的区别在于一个附加到现有文件,而另一个覆盖该文件。

        用法示例:

        AppendText

        using (StreamWriter writer = System.IO.File.AppendText("file.txt"))
        {
            writer.WriteLine("message");
        }
        

        CreateText

        using (StreamWriter writer = System.IO.File.CreateText("file.txt"))
        {
            writer.WriteLine("message");
        }
        

        【讨论】:

          【解决方案8】:

          让它更简单:

              using System.IO;
              ----------------
          
              var watcher = new BluetoothLEAdvertisementWatcher();
          
              var streamWriter = new StreamWriter($"Enter\\filepath\\here\\Log.txt");
          
              streamWriter.WriteLine("Log Message");
          
              streamWriter.Dispose();
          

          希望对你有帮助!

          【讨论】:

            猜你喜欢
            • 2017-06-01
            • 2017-06-12
            • 2020-08-08
            • 1970-01-01
            • 2017-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-05-12
            • 2023-01-09
            相关资源
            最近更新 更多