2016-02-10 19 views
23

Chcę użyć funkcji Bluetooth LE w .NET Core (w szczególności BluetoothLEAdvertisementWatcher), aby napisać skaner, który rejestruje informacje w pliku. Ma działać jako aplikacja komputerowa, a najlepiej jako aplikacja z wiersza poleceń.Jak pisać do pliku w .NET Core?

Konstruktory takie jak System.IO.StreamWriter (ciąg) są najwyraźniej niedostępne. Jak utworzyć plik i napisać do niego?

Byłbym tak szczęśliwy, mogąc zrobić System.Console.WriteLine (ciąg), ale to nie wydaje się być dostępne w .NET Core albo.

Aktualizacja: Aby wyjaśnić, gdybym mógł mieć program, który wygląda jak ten bieg bez błędu, będę na wyścigach.

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!"); 
     } 
    } 
} 

Aktualizacja 2: Oto plik 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": {} 
    } 
} 

Wyjście polecenia dotnet -v run zawiera ten komunikat o błędzie:

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

Czy to jest to samo, co musisz zrobić dla WinRT? http://blog.jerrynixon.com/2012/06/windows-8-how-to-read-files-in-winrt.html –

+0

Czy możesz udostępnić plik project.json? Być może brakuje niektórych odniesień do paczek. –

+0

@VictorHurdugaci Edytowałem pytanie, dołączając jeden z plików project.json, które wypróbowałem, wraz z wyświetlonym komunikatem o błędzie. Bez wątpienia referencje są błędne, trochę latam tu ślepo. Ten konkretny project.json został zaczerpnięty z szablonu projektu Visual Studio 2015 dla projektu .NET Core. – gauss256

Odpowiedz

51

Ten kod jest szkieletem, którego szukałem, gdy zadawałem pytanie. Używa tylko obiektów dostępnych w .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

Działa świetnie. Zgaduję, że za około sześć miesięcy będzie to kilkaset przegranych. – GDB

1

można uzyskać referencje System.IO przy użyciu repozytorium git corefx. Spowoduje to, że poszukiwany konstruktor StreamWrite (ciąg) będzie dostępny.

To repozytorium poda również funkcję Console.WriteLine (string), której szukasz.

+0

Brzmi nieźle, ale nadal tkwię. Zainstalowałem i zbudowałem CoreFX. Co teraz? Czy dodaję go jako odniesienie w projekcie Visual Studio? Czy przygotowuję i uruchamiam mój program za pomocą komend 'dotnet'? Dodałem fragment kodu do mojego pierwotnego pytania, aby wyjaśnić, co chciałbym zrobić jako pierwszy krok. – gauss256

+0

Po utworzeniu należy go dodać jako odniesienie tak, wtedy będzie można dołączyć bibliotekę System.IO przez umieszczenie w górnej części pliku 'using System.IO;' –

+0

Może być sposób, aby to zrobić, ale każda próba wprowadzenia odwołań do CoreFX kolidowała z .NET Core. – gauss256

7

Na dzień dzisiejszy, z RTM, nie wydaje się być to krótsza droga, a także:

var watcher = new BluetoothLEAdvertisementWatcher(); 

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

Nawet lepiej:

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

To rozwiązanie używam. Używa mniej linii kodu i wykonuje swoją pracę równie dobrze. Jest to również bardzo porównywalne z rdzeniem .NET 2.0

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