Как записать файл в .NET Core?
Я хочу использовать функции Bluetooth LE в .NET Core (в частности, BluetoothLEAdvertisementWatcher) для записи сканера, который регистрирует информацию в файле. Это должно выполняться как настольное приложение и предпочтительно как приложение командной строки.
Конструкторы, такие как System.IO.StreamWriter(строка), по-видимому, недоступны. Как создать файл и написать ему?
Я был бы так же счастлив, если бы смог выполнить System.Console.WriteLine(строка), но это, похоже, не доступно и в .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?)
...
Ответы
Ответ 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
На сегодняшний день с RTM, похоже, этот более короткий путь:
var watcher = new BluetoothLEAdvertisementWatcher();
var logPath = System.IO.Path.GetTempFileName();
var logWriter = System.IO.File.CreateText(logPath);
logWriter.WriteLine("Log message");
logWriter.Dispose();
Ответ 3
Еще лучше:
var logPath = System.IO.Path.GetTempFileName();
using (var writer = File.CreateText(logPath))
{
writer.WriteLine("log message"); //or .Write(), if you wish
}
Ответ 4
Вы можете получить ссылки System.IO, используя corefx git репозиторий. Это создаст конструктор StreamWrite (string), который вы ищете.
Этот репозиторий также предоставит вам функцию Console.WriteLine(string), которую вы ищете.
Ответ 5
Это решение, которое я использую. Он использует меньше строк кода и делает работу такой же хорошей. Это также очень похоже на .NET core 2.0
using (StreamWriter writer = System.IO.File.AppendText("logfile.txt"))
{
writer.WriteLine($"log message");
}