C # может читать из файла, который не существует? - PullRequest
1 голос
/ 01 сентября 2009

У нас есть код C #, который читает данные из текстового файла с помощью StreamReader. На одном компьютере мы можем прочитать данные из текстового файла, даже если он был удален или заменен другим текстовым файлом - вызов File.Exists сообщает, что файл существует, даже если его нет в проводнике Windows. Однако на другом компьютере такого поведения не происходит. Оба компьютера работают под управлением Vista Business и .NET 2.0.50727 SP2.

Мы попытались перезапустить аппарат без разрешения.

Кто-нибудь знает, как это возможно, и информацию о возможных решениях?

Спасибо, Alan

Ответы [ 3 ]

4 голосов
/ 01 сентября 2009

С MSDN

Метод Exists не должен использоваться для проверки пути, этот метод просто проверяет, существует ли файл, указанный в path.
Имейте в виду, что другой процесс потенциально может что-то делать с файлом в промежутке между вызовом метода Exists и выполнением другой операции над файлом, например, удаления. Рекомендуемая практика программирования - заключить метод Exists и выполняемые над файлом операции в блок try ... catch, как показано в примере. Это помогает сузить возможности для потенциальных конфликтов. Метод Exists может только помочь обеспечить доступность файла, но не может гарантировать его.

2 голосов
/ 01 сентября 2009

Может ли это быть проблема виртуализации папок ?

0 голосов
/ 01 сентября 2009

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

RE: File.Exists():

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

Скорее, всегда обрабатывайте исключения, которые могут быть сгенерированы из ваших реальных операций с файлами, которые открываются и т. Д., И проверяйте ввод, когда он открыт.

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