内存映射文件长度

我正在处理内存映射文件。 有没有办法知道内存映射文件内容的长度? 我想要的是附加现有的内存映射文件。 它很容易在文件中附加字节,但我希望追加字符串。

我们可以检查CAPACITY属性,但它返回我认为的字节大小。

为了更清楚,我正在解释这个场景。 我正在创建内存映射文件A.我在创建它时写“Hello”。 它工作正常。 现在我想将“World”写入现有文件A.

我正在使用下面的代码:

var file = MemoryMappedFile.OpenExisting("myFile"); string str = "String to append"; using (var view = file.CreateViewAccessor()) { using (var stream = file.CreateViewStream()) { System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream); writer.Write(str.ToArray(), INT SIZE,Convert.ToInt32(view.Capacity), str.Length);//Error } } using (var stream = file.CreateViewStream()) { Console.WriteLine("Reading appended File"); System.IO.BinaryReader reader = new System.IO.BinaryReader(stream); Console.WriteLine(reader.ReadString()); Console.WriteLine(string.Empty); } 

我用(//)标记了要求大小的行。 我想知道( INT SIZE )的价值任何帮助将不胜感激。

[编辑]我正在使用C#,Visual Studio 2010。

现在我使用此代码追加:

 var file = MemoryMappedFile.OpenExisting("myFile"); string str = "String to append"; string str1 = string.Empty; using (var stream = file.CreateViewStream()) { System.IO.BinaryReader reader = new System.IO.BinaryReader(stream); str1 = reader.ReadString(); str1 = str1 + "\n" + str; System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream); writer.Write(str1); } using (var stream = file.CreateViewStream()) { Console.WriteLine("Reading appended File"); System.IO.BinaryReader reader = new System.IO.BinaryReader(stream); Console.WriteLine(reader.ReadString()); Console.WriteLine(string.Empty); } 

但它没有附加任何东西。 你能查一下我的代码吗?

您不能通过在其后面写入更多字符来附加到流中的字符串,因为这不会更改已写入的字符串的长度。

此外,没有BinaryWriter方法可以让您像这样写入流中的特定位置。 对于采用字符数组和两个整数的重载,第二个参数指定数组中的位置,而不是流中的位置。

如果要更改流中写入的字符串,则必须从流中读取字符串并使用新字符串重写流。