ので、このコードsnipit:メモリマップファイルから読み込むときにどのような値を使用しますか? C#
static void Main(string[] args)
{
Console.WriteLine("Memory mapped file reader started");
using (var file = MemoryMappedFile.OpenExisting("AIDA64_SensorValues"))
{
using (var reader = file.CreateViewAccessor())
{
var bytes = new byte[3388];
var encoding = Encoding.ASCII;
XmlDocument document = new XmlDocument();
document.LoadXml("<root>" + encoding.GetString(bytes) + "</root>");
XmlNode node = document.DocumentElement.SelectSingleNode("//value");
Console.WriteLine("node = " + node);
}
}
Console.WriteLine("Press any key to exit ...");
Console.ReadLine();
}
、共有メモリ(snipit)からこのような情報を読み取る:
<sys><id>SCPUCLK</id><label>CPU Clock</label><value>2930</value></sys><sys><id>SCPUMUL</id><label>CPU Multiplier</label><value>11.0</value></sys>
とは<value></value>
はそれを印刷するすべての値を読み出します。 でも正しく動作しません。無効な文字が表示されます。 "例外が発生すると例外が発生します。
私は「新しいバイト[3388];」を変更しようとしました。 <root></root>
のない文字列の全長は3388です(それを見つけるためにhdd上のTXTファイルに出力されます)ので、私は13を追加して3401を取得しました(ルートタグがどれくらい長いので、 )
でも、 "'。、16進値0x00は無効な文字です(行1、位置7)。
おかげ
あなたは 'reader'を使用していないようです。 – ChaosPandion
document.LoadXml( "" + encoding.GetString(bytes)+ " "); この行では、バイトデータをどのくらい正確に埋めますか?あなたが示したコードでは、バイトは宣言されていますが、いっぱいになっていませんか? –
Zenwalker
なぜこのためにメモリマップファイルが必要ですか? XMLファイルから約3Kバイトを読み込む必要はありません。 –