如何写入 .NET Core 中的文件

本文关键字:文件 Core 何写入 NET | 更新日期: 2023-09-27 18:34:02

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

如何写入 .NET Core 中的文件

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

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

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

甚至更好:

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
}

如果你喜欢写更少的代码行,上面的代码可以重写为

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

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

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

若要写入 .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");
}

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

此存储库还将为您提供所需的 Console.WriteLine(string) 函数。

这是一个异步 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); 
        }
    }
}