使用类似的东西来确保目前没有写入目录是否安全?
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何时更新。
编辑:我希望通过确保一次处理整个目录,可以将其用于简化程序。最后,我决定重新考虑,因为变通办法比我试图避免的变得更加混乱和可靠性更低!尽管为答案干杯欢呼答案 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?因为这是一个常见的问题。