Будет ли вызов File.Exist блокировать файл? - PullRequest
6 голосов
/ 17 февраля 2009

Если я пытаюсь удалить файл, но в то же время другой процесс выполняет File.Exists (...) для того же файла, может ли это заблокировать файл и вызвать сбой моего процесса? *

Ответы [ 3 ]

11 голосов
/ 17 февраля 2009

Нет, File.Exist () только проверяет, находится ли рассматриваемый файл в файловой системе по указанному пути. В любом случае он не получает доступ к данным или заголовкам файла, поэтому не блокирует файл.

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

3 голосов
/ 17 февраля 2009

Нет, File.Exist не блокирует файл. Однако отличный способ увидеть, что происходит под одеялом, - это просмотреть исходный код .

Извлеките исходный код для библиотек базовых классов .Net Framework и посмотрите, что происходит за кулисами. В частности, класс System.IO.File имеет несколько очень интересных значений по умолчанию для обработки файлов, блокировки, освобождения и т. Д. В таких случаях, как ваш, наблюдение за тем, что происходит за кулисами, может иметь все значение с точки зрения того, как Вы разрабатываете свое приложение.

По ссылке:

Что я могу сделать с CLI Shared Source? В CLI Shared Source имеется множество технологий языков программирования. Это может быть интересно для широкой аудитории, в том числе:

  • Разработчики, заинтересованные во внутренней работе .NET Framework, могут изучить эту реализацию интерфейса командной строки, чтобы увидеть, как работает сборка мусора, как выполняется компиляция и проверка JIT, реализованы протоколы безопасности, а также организация каркасов и систем виртуальных объектов.
  • Учителя и исследователи, работающие с передовыми технологиями компиляции. Исследовательские проекты в области языковых расширений, JIT-оптимизаций и современной сборки мусора основаны на CLI Shared Source. Современные курсы по компилятору могут быть основаны на языках C # или JScript, реализованных в CLI.
  • Люди, разрабатывающие свои собственные реализации CLI, найдут CLI Shared Source незаменимым руководством и дополнением к стандартам ECMA.
2 голосов
/ 01 июня 2010

Это ответ anu - и любой, кто делает что-то подобное с файлами.

Очень важно получить доступ к файлам с помощью оператора using. Это гарантирует, что вы надлежащим образом утилизируете вашу ссылку на файл.

using (var fs = File.OpenRead(path)) {
    // Do something
}
...