DirectoryInfo.LastWriteTime是检查文件是否仍在上传的安全方法吗?

时间:2011-03-15 13:24:05

标签: .net vb.net file-io ftp filesystems

使用类似的东西来确保目前没有写入目录是否安全?

Dim ImportDir As New DirectoryInfo("C:\MyPath\")
If DateDiff(DateInterval.Minute, ImportDir.LastWriteTime, Now) < 10 Then
    Exit Sub
End If

我正在处理最高可达10MB的图像,因此我主要担心的是,我不确定LastWriteTime属性(可能是文件系统的'上次修改过的'元数据)是在第一个,最后一个或更新时更新的。文件的每个字节都写入磁盘。

文件通常通过IIS7 FTP上传到Windows 2008服务器上的NTFS文件系统。如果它依赖于文件系统,虽然最好还知道哪些filsystems何时更新。

编辑:我希望通过确保一次处理整个目录,可以将其用于简化程序。最后,我决定重新考虑,因为变通办法比我试图避免的变得更加混乱和可靠性更低!尽管为答案干杯欢呼

3 个答案:

答案 0 :(得分:2)

我不完全确定你的方法有多准确。但是,另一种解决方案是尝试在try-catch中以独占模式(FileShare.None)打开文件,例如

Dim fs As FileStream = File.Open(path, FileMode.Open, FileAccess.Write, FileShare.None);

(显然将它放在试一试)

虽然这通常被视为异常编码,但它确实提供了另一种方法来确保文件不被其他进程锁定。

答案 1 :(得分:2)

完全没有。在写入之后,LastWriteTime会更新,而不是在写入时。您需要依赖正在进行上传的程序来锁定文件。任何体面的人都会。因此,尝试使用FileShare.Read或FileShare.None打开文件,例如FileStream构造函数将抛出IOException。这几乎总能奏效。

答案 2 :(得分:1)

你会找到一个很好的答案,检查文件是否可以在这里访问:How to check for file lock?因为这是一个常见的问题。