3


0

両方に存在するファイルと存在しないファイルの奇妙なケース
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.)

このコードを実行している別のマシンには2人がいますが、例外を受け取っているのはそのうちの1人だけです。 例外は毎回発生するわけではありませんが、定期的に発生しています。 (1時間ごとに複数回。)コードはループ内になく、連続して実行されることもありません。たとえば、数分ごとに1回程度です。

一見、これは競合状態のように見えますが、このコードの実行頻度が低く、エラーが発生する頻度を考えると、何か他のことが起こっているに違いないと思います。

ここで実際に何が起こっているのかを追跡する方法についての提案をいただければ幸いです。 エラーが発生しないようにする解決策はさらに良いでしょう。

3 Answer


5


最初に尋ねる質問は、「ファイルは本当に存在するのか、それとも存在しないのか」です。そして、もしそうなら、それは特別な属性を持っていますか(それは読み取り専用か隠し、またはシステム---またはディレクトリですか)?

Microsoft.VisualBasic.FileSystem.Killは、「System」または「Hidden」とマークされたファイルを特に検索し、静かにスキップします。 他のほとんどの問題については、別の例外が発生します。


0


Jamesが指摘したように、Kill関数は、ケース内のファイルがシステムまたは隠しファイルであるかどうかをチェックするため、代わりにSystem.IO.File.Delete()を使用した方が良い

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

File.Delete()がそれ自体をチェックするため、File.Exitsを使用することは不名誉ではありません。


0


I:ドライブがネットワークドライブである可能性はありますか? ネットワークの問題の可能性があります…​ または、おそらく競合状態