2016-02-10 20 views
23

Ich möchte die Bluetooth LE-Funktionen in .NET Core (speziell BluetoothLEAdvertisementWatcher) verwenden, um einen Scanner zu schreiben, der Informationen in einer Datei protokolliert. Dies soll als Desktop-Anwendung und vorzugsweise als Befehlszeilen-App ausgeführt werden.Wie schreibe ich in eine Datei in .NET Core?

Konstruktoren wie System.IO.StreamWriter (Zeichenfolge) sind anscheinend nicht verfügbar. Wie erstelle ich eine Datei und schreibe darauf?

Ich wäre genauso glücklich, in der Lage zu sein, eine System.Console.WriteLine (string) zu tun, aber das scheint auch nicht unter .NET Core verfügbar zu sein.

Update: Um zu klären, wenn ich ein Programm haben könnte, das so ohne Fehler läuft, werde ich zu den Rennen gehen.

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: Hier ist die project.json Datei:

{ 
    "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": {} 
    } 
} 

Die Ausgabe des Befehls dotnet -v run enthält diese Fehlermeldung:

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

Ist es das gleiche wie Sie für WinRT tun müssen? http://blog.jerrynixon.com/2012/06/windows-8-how-to-read-files-in-winrt.html –

+0

Können Sie die Datei project.json teilen? Möglicherweise fehlen Ihnen einige Paketreferenzen. –

+0

@VictorHurdugaci Ich habe die Frage bearbeitet, um eine der project.json-Dateien, die ich ausprobiert habe, zusammen mit der Fehlermeldung, die sich ergibt, einzufügen. Zweifellos sind die Referenzen falsch, ich fliege hier irgendwie blind. Diese bestimmte project.json wurde einer Visual Studio 2015-Projektvorlage für ein .NET Core-Projekt entnommen. – gauss256

Antwort

51

Dieser Code ist das Skelett, nach dem ich gesucht habe, als ich die Frage gestellt habe. Es verwendet nur Funktionen, die in .NET Core verfügbar sind.

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

Funktioniert gut. Ich schätze, in ungefähr sechs Monaten wird es mehrere hundert upvotes geben. – GDB

1

Sie können die System.IO Referenzen erhalten mit dem corefx Git-Repository. Dadurch wird der gesuchte StreamWrite (string) -Konstruktor verfügbar gemacht.

Dieses Repository gibt Ihnen auch die Console.WriteLine (string) Funktion, die Sie suchen.

+0

Klingt gut, aber ich bin immer noch fest. Ich habe CoreFX installiert und gebaut. Was jetzt? Füge ich es als Referenz in einem Visual Studio-Projekt hinzu? Bereite ich mein Programm mit 'dotnet' Befehlen vor? Ich habe meiner ursprünglichen Frage ein Code-Snippet hinzugefügt, um zu verdeutlichen, was ich als ersten Schritt erreichen möchte. – gauss256

+0

Sobald es gebaut ist, müssen Sie es als Referenz yes hinzufügen, dann können Sie die System.IO-Bibliothek hinzufügen, indem Sie eine Verwendung an der Spitze der Datei 'using System.IO;' –

+0

Es kann eine sein Möglichkeit, dies zu tun, aber jeder Versuch, Referenzen auf CoreFX aufzunehmen, widersprach .NET Core. – gauss256

7

Ab heute mit RTM scheint es auch in diesem kürzeren Weg zu sein:

var watcher = new BluetoothLEAdvertisementWatcher(); 

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

Noch besser:

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

Dies ist die Lösung, die ich bin mit. Es verwendet weniger Codezeilen und erledigt den Job genauso gut. Es ist auch sehr kompatibel mit .NET Core 2.0

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