Безопасное копирование файлов при блокировке процессом
Суть вопроса:
Запущен процесс программы, мне нужно от программы скопировать файлы и сохранить в памяти.
Для сохранения использую 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);