不同PC上的几个.NET应用程序如何同时从网络共享复制相同的文件?

时间:2017-01-25 17:57:22

标签: c# .net vb.net file-copying

我有一个多人使用的应用程序。应用程序使用的数据是网络共享上的平面文件形式。应用程序在打开文件之前将文件复制到本地驱动器。数据文件每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)

这会在复制时锁定文件吗?如果是这样,我如何确保每个应用程序都没有锁定文件?有没有更好的方法来做到这一点?

0 个答案:

没有答案