如何写入 .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 中可用的功能。
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 中的文件,可以使用两种方法:
-
AppendText()
-
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);
}
}
}