Длина отображаемого в память файла - PullRequest
5 голосов
/ 07 марта 2012

Я работаю с файлами, отображенными в память. Есть ли способ узнать длину отображаемого в памяти содержимого файла? То, что я хочу, это добавить существующий файл сопоставленной памяти. Легко добавить байты в файл, но я ищу, чтобы добавить строку.

Мы можем проверить свойство 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 ) Любая помощь будет оценена.

[ПРАВИТЬ] Я использую 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);
            }

Но ничего не добавляется. Можете ли вы проверить мой код?

1 Ответ

0 голосов
/ 07 марта 2012

Вы не можете добавить строку в поток, написав после нее больше символов, так как это не изменит длину уже записанной строки.

Кроме того, нет метода BinaryWriter, что позволяет вам писать в определенную позицию в потоке, как это.Для перегрузки, которая принимает массив символов и два целых числа, второй параметр указывает позицию в массиве, а не позицию в потоке.

Если вы хотите изменить строку, записанную в потоке, вы должнычитать строку из потока и переписывать поток новой строкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...