Je souhaite utiliser les fonctions Bluetooth LE dans .NET Core (en particulier BluetoothLEAdvertisementWatcher) pour écrire un scanner qui enregistre les informations dans un fichier. Ceci doit être exécuté en tant qu'application de bureau et de préférence en tant qu'application en ligne de commande.
Des constructeurs comme System.IO.StreamWriter (chaîne) ne sont apparemment pas disponibles. Comment créer un fichier et y écrire?
Je serais tout aussi heureux de pouvoir faire un System.Console.WriteLine (chaîne), mais cela ne semble pas non plus être disponible sous .NET Core.
Mise à jour: pour clarifier, si je pouvais avoir un programme qui ressemble à ceci couru sans erreur, je vais aller aux courses.
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!");
}
}
}
Mise à jour 2: Voici le fichier 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": {}
}
}
Le résultat de la commande dotnet -v run
contient ce message d'erreur:
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?)
...
Ce code est le squelette que je cherchais lorsque j'ai posé la question. Il utilise uniquement les fonctionnalités disponibles dans .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();
Encore mieux:
var logPath = System.IO.Path.GetTempFileName();
using (var writer = File.CreateText(logPath))
{
writer.WriteLine("log message"); //or .Write(), if you wish
}
C'est la solution que j'utilise. Il utilise moins de lignes de code et fait le travail aussi bien. Il est également très compatible avec .NET Core 2.0
using (StreamWriter writer = System.IO.File.AppendText("logfile.txt"))
{
writer.WriteLine("log message");
}
À compter d’aujourd’hui, avec RTM, il semble exister également ce moyen plus court:
var watcher = new BluetoothLEAdvertisementWatcher();
var logPath = System.IO.Path.GetTempFileName();
var logWriter = System.IO.File.CreateText(logPath);
logWriter.WriteLine("Log message");
logWriter.Dispose();
Vous pouvez obtenir les références System.IO en utilisant le référentiel git corefx . Cela rendra le constructeur StreamWrite (chaîne) que vous recherchez disponible.
Ce référentiel vous donnera également la fonction Console.WriteLine (chaîne) que vous recherchez.
Fait plus simple:
using System.IO;
----------------
var watcher = new BluetoothLEAdvertisementWatcher();
var streamWriter = new StreamWriter($"Enter\\filepath\\here\\Log.txt");
streamWriter.WriteLine("Log Message");
streamWriter.Dispose();
J'espère que ça aide!