Можем ли мы объединить два файла с отображением памяти? если да, то как? Если нет, то почему?Можем ли мы объединить два файла с отображением памяти?
ответ
Так вот мои первые опыты с MemoryMappedFiles
, дайте ему попробовать:
String f1Path = @"C:\Temp\Test1.txt";
String f2Path = @"C:\Temp\Test2.txt";
byte[] buffer;
int offset;
int length;
using (FileStream f1ReadStream = new FileStream(f1Path, FileMode.Open, FileAccess.Read))
{
offset = (int)f1ReadStream.Length;
}
using (FileStream f2ReadStream = new FileStream(f2Path, FileMode.Open, FileAccess.Read))
{
length = (int)f2ReadStream.Length;
}
// read file2 and append all to file1
using (var mappedFile2 = MemoryMappedFile.CreateFromFile(f2Path, FileMode.Open, null, length))
{
using (var reader = mappedFile2.CreateViewStream(0, length, MemoryMappedFileAccess.Read))
{
// Read from MMF
buffer = new byte[length];
reader.Read(buffer, 0, length);
}
}
using (var mappedFile1 = MemoryMappedFile.CreateFromFile(f1Path,FileMode.Open, null, offset + length))
{
// Create writer to MMF
using (var writer = mappedFile1.CreateViewAccessor(offset, length, MemoryMappedFileAccess.Write))
{
// Write to MMF
writer.WriteArray<byte>(0, buffer, 0, length);
}
}
Отличный !! .. Кажется, работает. Необходимо проверить, подходит ли это моему сценарию. Спасибо, что вы посвятили свое время. –
вы можете ответить на мой вопрос? Http: //stackoverflow.com/questions/9760073/memorymappedfile-doesnt-work-with-2-processes –
В моем проекте это не работает. Я не знаю почему. Test1.txt не изменяется. –
Можете ли вы описать в еще несколько слов, preferibly с примерами кода, что вы пытаетесь достичь. –
Что вы подразумеваете под "merge"? Отображение памяти - это еще один способ взглянуть на данные в файле. Можете ли вы описать желаемый результат без использования карт памяти? –
Вы не можете * объединить * две области mmap'ed, но вы можете * скопировать * данные от одного к другому или создать единый * вид *. –