所以这个代码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字节不应该这样做。 –