2016-02-10 27 views
23

Desidero utilizzare le funzioni Bluetooth LE in .NET Core (in particolare, BluetoothLEAdvertisementWatcher) per scrivere uno scanner che registra le informazioni su un file. Questo è da eseguire come applicazione desktop e preferibilmente come app da riga di comando.Come scrivere su un file in .NET Core?

I costruttori come System.IO.StreamWriter (stringa) non sono disponibili, apparentemente. Come posso creare un file e scriverlo?

Sarei altrettanto felice di poter eseguire System.Console.WriteLine (stringa) ma non sembra essere disponibile in .NET Core.

Aggiornamento: per chiarire, se potessi avere un programma simile a questo senza errori, andrò alle corse.

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

Aggiornamento 2: Ecco il file 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": {} 
    } 
} 

L'output del comando dotnet -v run contiene questo messaggio di errore:

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

È lo stesso che devi fare per WinRT? http://blog.jerrynixon.com/2012/06/windows-8-how-to-read-files-in-winrt.html –

+0

Puoi condividere il file project.json? Potresti mancare alcuni riferimenti al pacchetto. –

+0

@VictorHurdugaci Ho modificato la domanda per includere uno dei file project.json che ho provato, insieme al messaggio di errore che risulta. Non c'è dubbio che i riferimenti siano sbagliati, io sono un po 'come volare cieco qui. Questo project.json particolare è stato preso da un modello di progetto di Visual Studio 2015 per un progetto .NET Core. – gauss256

risposta

51

Questo codice è lo scheletro che cercavo quando ho posto la domanda. Utilizza solo le funzionalità disponibili in .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

Funziona alla grande. Sto indovinando in circa sei mesi questo avrà diverse centinaia di upvotes. – GDB

1

È possibile ottenere i riferimenti System.IO utilizzando il repository git corefx. Ciò renderà disponibile il costruttore StreamWrite (stringa) che stai cercando.

Questo repository ti fornirà anche la funzione Console.WriteLine (stringa) che stai cercando.

+0

Sembra buono, ma sono ancora bloccato. Ho installato e costruito CoreFX. Ora cosa? Lo aggiungo come riferimento in un progetto di Visual Studio? Preparo ed eseguo il mio programma usando i comandi 'dotnet'? Ho aggiunto uno snippet di codice alla mia domanda originale per chiarire cosa mi piacerebbe realizzare come primo passo. – gauss256

+0

Una volta creato è necessario aggiungerlo come riferimento sì, quindi sarà possibile includere la libreria System.IO inserendo un utilizzo nella parte superiore del file 'using System.IO;' –

+0

Potrebbe esserci un modo per farlo, ma ogni tentativo che ho fatto di includere riferimenti a CoreFX è in conflitto con .NET Core. – gauss256

7

A partire da oggi, con RTM, sembra che ci sia in questo modo più breve così:

var watcher = new BluetoothLEAdvertisementWatcher(); 

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

Ancora meglio:

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

Questa è la soluzione che sto utilizzando. Usa poche righe di codice e fa il lavoro altrettanto bene. È anche molto comparabile con .NET core 2.0

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