Длина отображаемого в память файла
Я работаю над файлами, отображенными в память. Есть ли способ узнать длину отображаемого в памяти содержимого файла? То, что я хочу, это добавить существующий файл сопоставленной памяти. Легко добавить байты в файл, но я ищу, чтобы добавить строку.
Мы можем проверить свойство CAPACITY, но я думаю, что он возвращает размер в байтах.
Чтобы быть более понятным, я объясняю сценарий. Я создаю файл сопоставленной памяти A. Я пишу "Hello", когда создаю его. Работает нормально. Теперь я хочу записать "Мир" в существующий файл А.
Я использую ниже код для этого:
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);
}
Но это не добавление ничего. Можете ли вы проверить мой код?
1 ответ
Вы не можете добавить строку в поток, написав после нее больше символов, так как это не изменит длину уже записанной строки.
Кроме того, нет метода BinaryWriter
это позволяет вам писать в определенную позицию в потоке, как это. Для перегрузки, которая принимает массив символов и два целых числа, второй параметр указывает позицию в массиве, а не позицию в потоке.
Если вы хотите изменить строку, записанную в потоке, вы должны прочитать строку из потока и перезаписать поток новой строкой.