C # доступ к заблокированным файлам - PullRequest
4 голосов
/ 13 июля 2011

Я хочу получить доступ к файлу через c #, который создается и обрабатывается другой программой.
В настоящее время я копирую файл через проводник Windows в другое место и работаю с копией. Поскольку копия большая, я бы предпочел работать прямо с оригинальным файлом. Есть ли способ?
Обычный FileStream не разрешает какой-либо режим общего доступа. У меня есть контроль над обеими программами, так что я могу также изменить автора, если это необходимо.

Ответы [ 2 ]

4 голосов
/ 13 июля 2011

Вам необходимо убедиться, что программа, выполняющая запись и чтение, имеет правильный набор FileShare, поэтому вам нужно передать FileShare.Read в конструктор FileStream для написания программы:

new FileStream("C:/Users/phil/tmp.txt",FileMode.Create,FileAccess.Write,FileShare.Read)

Вы также должны убедиться, что у вас включена программа FileShare.ReadWrite для программы, которая только читает ее:

new FileStream("C:/Users/phil/tmp.txt",FileMode.Open,FileAccess.Read,FileShare.ReadWrite)

Это приведет к тому, что конструкторы FileStream установят правильные блокировки для самого файла.

Подробнее о конструкторе можно узнать в msdn: http://msdn.microsoft.com/en-us/library/5h0z48dh.aspx (есть и другие перегрузки, которые также принимают параметр FileShare)

0 голосов
/ 07 сентября 2017

Вы можете использовать мою библиотеку для доступа к файлам из нескольких приложений.

Вы можете установить его из nuget: Install-Package Xabe.FileLock

Если вы хотите больше информации об этом, проверьте https://github.com/tomaszzmuda/Xabe.FileLock

ILock fileLock = new FileLock(file);
if(fileLock.Acquire(TimeSpan.FromSeconds(15), true))
{
    using(fileLock)
    {
        // file operations here
    }
}

Метод fileLock.Acquire вернет true, только если может заблокировать файл исключительно для этого объекта. Но приложение, которое загружает файл, должно делать это и при блокировке файла. Если объект недоступен, метод возвращает false.

Так что, если вы хотите использовать его, вы должны установить этот пакет приложения и файла блокировки, прежде чем вносить в него данные, а затем немедленно снять блокировку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...