C# 内存映射文件长度

C# 内存映射文件长度,c#,memory-mapped-files,C#,Memory Mapped Files,我正在处理内存映射文件。有没有办法知道内存映射文件内容的长度?我想要的是附加现有的内存映射文件。在文件中附加字节很容易,但我希望附加字符串 我们可以检查CAPACITY属性,但它返回我认为的字节大小 更清楚地说,我正在解释这个场景。我正在创建内存映射文件A。创建它时,我会写“Hello”。它很好用。现在我想将“世界”写入现有文件A 我正在为此使用以下代码: var file = MemoryMappedFile.OpenExisting("myFile"); strin

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

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

更清楚地说,我正在解释这个场景。我正在创建内存映射文件A。创建它时,我会写“Hello”。它很好用。现在我想将“世界”写入现有文件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)的值 任何帮助都将不胜感激

[编辑]我正在使用Visual Studio 2010中的C#

现在我使用此代码附加:

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
方法可以让您像这样写入流中的特定位置。对于采用字符数组和两个整数的重载,第二个参数指定数组中的位置,而不是流中的位置


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

感谢您的回复。你能再检查一下我的问题吗?我试过了,从你的回答中我明白了。但它不起作用。@Deepak:在写入流之前,您必须重置或重新打开流,否则您将在停止读取的位置继续写入,因此原始字符串仍然是流中的第一个字符串。你好,Guffa,我有个问题。你能在这里回复吗?或者我应该这样问吗?如果你能看到这个问题@MohamedSakherSawan:内存映射文件的长度与容量相同。如果以内存映射文件的形式打开文件,则为文件的长度。如果创建一个新的内存映射文件,您可以自己指定容量。