内存映射文件长度

本文关键字:文件 映射 内存 | 更新日期: 2023-09-27 18:27:10

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

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

为了更清楚,我正在解释这个场景。我正在创建内存映射文件A。创建它时我会写"你好"。它运行良好。现在我想把"世界"写入现有的文件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)的值如有任何帮助,我们将不胜感激。

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

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