我有一个多人使用的应用程序。应用程序使用的数据是网络共享上的平面文件形式。应用程序在打开文件之前将文件复制到本地驱动器。数据文件每30分钟更新一次。应用程序每5分钟检查一次是否已更新(通过比较时间戳)。如果文件已更新,则应用程序会将新文件复制下来。
只有少数人使用该应用程序,复制文件从未出现过问题。现在他们已经打开了应用程序供任何人使用。一夜之间它只是从使用它的几个人到大约50个,这可能会增加。现在我们看到应用程序开始复制文件,但是它才真正开始接收文件。
我正在使用kernel32.dll中的CopyFileEx函数。
Private Declare Auto Function CopyFileEx Lib "kernel32.dll" (ByVal lpExistingFileName As String, _
ByVal lpNewFileName As String, ByVal lpProgressRoutine As CopyProgressRoutine, _
ByVal lpData As IntPtr, ByRef pbCancel As Boolean, _
ByVal dwCopyFlags As CopyFileFlags) As <MarshalAs(UnmanagedType.Bool)> Boolean
Private Delegate Function CopyProgressRoutine(ByVal TotalFileSize As Long, _
ByVal TotalBytesTransferred As Long, ByVal StreamSize As Long, ByVal StreamBytesTransferred As Long, _
ByVal dwStreamNumber As UInteger, ByVal dwCallbackReason As CopyProgressCallbackReason, _
ByVal hSourceFile As IntPtr, ByVal hDestinationFile As IntPtr, ByVal lpData As IntPtr) As CopyProgressResult
Success = CopyFileEx(SourcePath, DestPath, New CopyProgressRoutine(AddressOf CopyProgressCallback), IntPtr.Zero, False, If(Overwrite, 0, CopyFileFlags.COPY_FILE_FAIL_IF_EXISTS) Or CopyFileFlags.COPY_FILE_NO_BUFFERING)
这会在复制时锁定文件吗?如果是这样,我如何确保每个应用程序都没有锁定文件?有没有更好的方法来做到这一点?