Безопасное копирование файлов при блокировке процессом

Суть вопроса: Запущен процесс программы, мне нужно от программы скопировать файлы и сохранить в памяти. Для сохранения использую MemoryStream. Так вот он не даёт скопировать в себя файл(ы) если открыт процесс программы из которой я копирую файлы.

Вот почему если открыт процесс, то я могу сделать это через File.Copy (но с записью на диск) в отдельной папке. А вот в память не могу скопировать( Такое вообще возможно сделать?


Ответы (2 шт):

Автор решения: r3xq1

Вы можете скопировать безопасно файл(ы) в памяти, это реализовывается очень просто.
Создаёте память для записи:

using System.IO.MemoryStream ms = new() { Position = 0};

Затем читаете нужны(е)й Вам файл(ы) и записываете в MemoryStream

 using System.IO.FileStream fs = new(file, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite);
 fs.CopyTo(ms);
 fs?.Close();  // Если поток не закрылся (закрываем принудительно!)

Затем просто возвращаем MemoryStream и на выходе будут наши файлы:

ms?.ToArray() ?? ms.GetBuffer() ?? System.IO.File.ReadAllBytes(file)
→ Ссылка
Автор решения: Yotic
string fileToCopyPath = "C:\\log.txt";
MemoryStream memory = new MemoryStream();
using (FileStream sr = new FileStream(fileToCopyPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    sr.CopyTo(memory);
→ Ссылка