这个文件的奇怪案例既包括也包括

时间:2010-09-08 15:32:55

标签: windows file .net-3.5 kill

在.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 个答案:

答案 0 :(得分:5)

我想要问的第一个问题是“文件真的存在吗?”如果是的话,它是否具有任何特定属性(是只读还是隐藏,还是系统---还是目录)?

请注意,Microsoft.VisualBasic.FileSystem.Kill专门查找并静默跳过标记为“系统”或“隐藏”的任何文件。对于几乎任何其他问题,你会得到一个不同的例外。

答案 1 :(得分:0)

正如James所指出的,Kill函数检查文件是否是系统或隐藏的,你最好使用System.IO.File.Delete()代替

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

使用File.Exits并不是必需的,因为File.Delete()会自行检查。

答案 2 :(得分:0)

I:驱动器是否有可能是网络驱动器?这可能是一些网络问题......或者可能是竞争条件