2012-03-09 4 views
0

Можем ли мы объединить два файла с отображением памяти? если да, то как? Если нет, то почему?Можем ли мы объединить два файла с отображением памяти?

+0

Можете ли вы описать в еще несколько слов, preferibly с примерами кода, что вы пытаетесь достичь. –

+0

Что вы подразумеваете под "merge"? Отображение памяти - это еще один способ взглянуть на данные в файле. Можете ли вы описать желаемый результат без использования карт памяти? –

+0

Вы не можете * объединить * две области mmap'ed, но вы можете * скопировать * данные от одного к другому или создать единый * вид *. –

ответ

3

Так вот мои первые опыты с 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); 
    } 
} 
+1

Отличный !! .. Кажется, работает. Необходимо проверить, подходит ли это моему сценарию. Спасибо, что вы посвятили свое время. –

+0

вы можете ответить на мой вопрос? Http: //stackoverflow.com/questions/9760073/memorymappedfile-doesnt-work-with-2-processes –

+0

В моем проекте это не работает. Я не знаю почему. Test1.txt не изменяется. –