.NET CoreのBluetooth LE機能(具体的には、BluetoothLEAdvertisementWatcher)を使用して、情報をファイルに記録するスキャナーを作成したい。これは、デスクトップアプリケーションとして、できればコマンドラインアプリとして実行することです。
System.IO.StreamWriter(string)のようなコンストラクターは使用できないようです。ファイルを作成して書き込むにはどうすればよいですか?
System.Console.WriteLine(string)を実行できるようになりますが、それは.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!");
}
}
}
更新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?)
...
このコードは、質問を提起したときに探していたスケルトンです。 .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();
さらに良い:
var logPath = System.IO.Path.GetTempFileName();
using (var writer = File.CreateText(logPath))
{
writer.WriteLine("log message"); //or .Write(), if you wish
}
これは私が使用しているソリューションです。使用するコードの行数が少なく、同じように仕事をします。また、.NET Core 2.0とも非常に互換性があります
using (StreamWriter writer = System.IO.File.AppendText("logfile.txt"))
{
writer.WriteLine("log message");
}
今日の時点で、RTMでは、このより短い方法もあるようです。
var watcher = new BluetoothLEAdvertisementWatcher();
var logPath = System.IO.Path.GetTempFileName();
var logWriter = System.IO.File.CreateText(logPath);
logWriter.WriteLine("Log message");
logWriter.Dispose();
corefx gitリポジトリを使用して、System.IO参照を取得できます。これにより、探しているStreamWrite(string)コンストラクタが利用可能になります。
このリポジトリは、探しているConsole.WriteLine(string)関数も提供します。
よりシンプルに:
using System.IO;
----------------
var watcher = new BluetoothLEAdvertisementWatcher();
var streamWriter = new StreamWriter($"Enter\\filepath\\here\\Log.txt");
streamWriter.WriteLine("Log Message");
streamWriter.Dispose();
それが役に立てば幸い!