Подтвердить что ты не робот

Как записать файл в .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?)
...
4b9b3361

Ответ 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");
}