Ожидание получения монопольного доступа к файлу перед его перемещением в C # - PullRequest
4 голосов
/ 20 мая 2009

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

Я использую Microsoft C # и .Net framework 3.5.

Ура, Хамид

Ответы [ 3 ]

3 голосов
/ 20 мая 2009

Если у вас есть контроль как над создателем файла, так и за потребителем, старый способ - создать файл под другим именем и переименовать его после завершения. Например, допустим, что производитель создает файлы, которые всегда называются file_.txt, а ваш потребитель сканирует все файлы, начиная с file_, тогда производитель может сделать это: 1. Создайте файл с именем tmpfile_.txt 2. Когда файл записывается, производитель просто переименовывает файл в file_.txt

Операция переименования является атомарной, поэтому, как только ваш потребитель увидит ее доступной, ее можно безопасно открыть.

Конечно, этот ответ зависит от того, пишете ли вы обе программы.

НТН Дермот.

0 голосов
/ 30 июля 2009

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

0 голосов
/ 20 мая 2009

Просто попробуйте открыть файл для эксклюзивной записи? (например, передать FileShare.None в конструктор FileStream). Открыв его, вы знаете, что никто другой не использует его. Однако это может быть не лучшим способом сделать то, что вы делаете.

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

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