Вопрос

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

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

Есть ли у кого-нибудь какое-либо понимание того, как это может быть возможно, и информация о возможных решениях?

Спасибо, Алан

Это было полезно?

Решение

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

Другие советы

От MSDN

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

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

РЕ: File.Exists():

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top