Причудливый случай файла, который есть и не существует - PullRequest
3 голосов
/ 08 сентября 2010

В .Net 3.5 у меня есть следующий код.

If File.Exists(sFilePath & IndexFileName & ".NX") Then
  Kill(sFilePath & IndexFileName & ".NX")
End If

Во время выполнения на компьютере одного клиента я снова и снова получаю следующее исключение, когда этот код выполняет

Source: Microsoft.VisualBasic
TargetSite: Microsoft.VisualBasic.FileSystem.Kill
Message: No files found matching 'I:\RPG\HGIAPVXD.NX'.
StackTrace: 
   at Microsoft.VisualBasic.FileSystem.Kill(String PathName)
(More trace that identifies the exact line of code.)

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

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

Буду признателен за любые предложения о том, как я могу отследить, что на самом деле происходит здесь.Решение, чтобы предотвратить возникновение ошибки, было бы еще лучше.

Ответы [ 3 ]

5 голосов
/ 08 сентября 2010

Полагаю, первый вопрос, который нужно задать, - это файл действительно есть или нет?и если да, имеет ли он какие-либо специфические атрибуты («Только для чтения», «Скрытый», «Системный» или «Каталог»)?

Обратите внимание, что Microsoft.VisualBasic.FileSystem.Kill специально ищет и молчапропускает любой файл, помеченный как «Системный» или «Скрытый».Для практически любой другой проблемы вы бы получили другое исключение.

0 голосов
/ 08 сентября 2010

Есть ли вероятность того, что диск I: является сетевым диском?это может быть какая-то проблема с сетью ... или тогда может быть состояние гонки

0 голосов
/ 08 сентября 2010

Как указал Джеймс, функции Kill проверяют, является ли файл в случае системным или скрытым, лучше вместо него использовать System.IO.File.Delete ()

    Try
        System.IO.File.Delete(sFilePath & IndexFileName & ".NX")
    Catch ex As System.Exception
        ...
    End Try

использование File.Exits не является обязательным, поскольку File.Delete () проверяет это самостоятельно.

...