如何写入 .NET Core 中的文件?

How to write to a file in .NET Core?

我想使用 .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?)
...

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

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

这段代码是我提出问题时正在寻找的框架。它仅使用 .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();

截至今天,对于 RTM,似乎还有这种更短的方式:

var watcher = new BluetoothLEAdvertisementWatcher();

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

更好:

using System.IO;

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

如果你喜欢写更少的代码行,上面可以re-written as

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

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

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

让它更简单:

    using System.IO;
    ----------------

    var watcher = new BluetoothLEAdvertisementWatcher();

    var streamWriter = new StreamWriter($"Enter\filepath\here\Log.txt");

    streamWriter.WriteLine("Log Message");

    streamWriter.Dispose();

希望对您有所帮助!

这是一个异步 FileWriter class。

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

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

  1. AppendText()
  2. CreateText()

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

使用示例:

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");
}