2016-02-10 6 views
23

Я хочу использовать функции Bluetooth LE в .NET Core (в частности, BluetoothLEAdvertisementWatcher) для записи сканера, который регистрирует информацию в файле. Это должно выполняться как настольное приложение и предпочтительно как приложение командной строки.Как записать файл в .NET Core?

Конструкторы, такие как 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!"); 
     } 
    } 
} 

Update 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?) 
... 
+0

Это то же самое, что вам нужно сделать для WinRT? http://blog.jerrynixon.com/2012/06/windows-8-how-to-read-files-in-winrt.html –

+0

Можете ли вы поделиться файлом project.json? Возможно, вам не хватает ссылок на пакеты. –

+0

@VictorHurdugaci Я отредактировал вопрос, включив один из файлов project.json, который я пробовал, вместе с сообщением об ошибке. Несомненно, ссылки неверны, я вроде как летел слепой здесь. Этот конкретный project.json был взят из шаблона проекта Visual Studio 2015 для проекта .NET Core. – gauss256

ответ

51

Этот код является скелетом, который я искал, когда задавал вопрос. Он использует только средства, доступные в .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

Отлично работает. Я предполагаю, что примерно через шесть месяцев это будет иметь несколько сотен оборотов. – GDB

1

Вы можете получить ссылки System.IO используя репозиторий git corefx. Это создаст конструктор StreamWrite (string), который вы ищете.

Этот репозиторий также предоставит вам функцию Console.WriteLine (string), которую вы ищете.

+0

Звучит неплохо, но я все еще застрял. Я установил и построил CoreFX. Что теперь? Я могу добавить его в качестве ссылки в проекте Visual Studio? Я готовлю и запускаю свою программу с помощью команд 'dotnet'? Я добавил фрагмент кода к своему первоначальному вопросу, чтобы уточнить, что я хотел бы сделать в качестве первого шага. – gauss256

+0

После того, как он будет создан, вам необходимо добавить его в качестве ссылки да, тогда вы сможете включить библиотеку System.IO, поставив в верхнюю часть файла «using System.IO;» –

+0

. Может быть способ сделать это, но каждая попытка, которую я сделал, чтобы включить ссылки на CoreFX, столкнулась с .NET Core. – gauss256

7

По состоянию на сегодняшний день, с RTM, там, кажется, это более короткий путь, а также:

var watcher = new BluetoothLEAdvertisementWatcher(); 

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

Еще лучше:

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

Это решение я использую. Он использует меньше строк кода и делает работу такой же хорошей. Это также очень похоже на .NET core 2.0

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

 Смежные вопросы

  • Нет связанных вопросов^_^