所以這個代碼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(打印到HDT上的TXT文件找出來),所以我加了13,得到了3401(因爲那是多長時間的根標籤,我不得不添加修復多個根錯誤)
但我似乎仍然得到關於「'。」的錯誤,十六進制值0x00,是一個無效的字符,第1行,第7位。
感謝
你似乎沒有使用'reader'。 – ChaosPandion
document.LoadXml(「」+ encoding.GetString(bytes)+「 」); 在這一行中,您如何填充字節數據?我的意思是在你顯示的代碼中,字節得到了聲明,但是根本沒有被填充? –
Zenwalker
爲什麼你需要一個內存映射文件?從XML文件讀取約3K字節不應該這樣做。 –