1

我有一个服务器位置路径,例如\\10.100.100.10000\Builds. 每当有人在 Visual Studio 中的服务器中强制构建时2013.1.3.1,都会创建一个新的构建文件夹,例如 ,并将新文件复制到其中。我需要写一个Windows Service,所以当文件夹被完全复制时,我需要提取Application.exe并做一些处理。

我的问题是如何知道文件夹是否已完全复制?谷歌搜索和 Binging 对我没有多大帮助。我是否必须告诉我的团队谁正在触发构建事件来做一些自定义工作,让我的程序知道复制文件已经完成?或者有一些 .Net 库来完成这项任务?

4

2 回答 2

1

您可以使用 FileSystemWatcher 监视文件夹中的活动,监视可以在 Windows 服务启动时启动(在启动方法中)。

您可以使用 FileWatcher 注册以下事件处理程序

FSWatcher.Deleted += new System.IO.FileSystemEventHandler(this.FSWatcher_Deleted); FSWatcher.Renamed += new System.IO.RenamedEventHandler(this.FSWatcher_Renamed); FSWatcher.Changed += new System.IO.FileSystemEventHandler(this.FSWatcher_Changed); FSWatcher.Created += new System.IO.FileSystemEventHandler(this.FSWatcher_Created);

FSWatcher_Changed 事件将一直被触发,直到复制过程完成。

您可以使用此事件来了解复制何时开始并等待复制过程完成。

复制过程完成后,我的意思是当文件夹安静时,您可以开始提取 Application.Exe 或您想做的任何其他任务。

希望能帮助到你。

于 2013-03-04T10:52:54.800 回答
1

我最后就是这样做的,看看文件夹复制是否完成。在属性创建System.IO.FileSystemWatcher并分配一个事件。Created

private void FileSystemWatcherCreated(object sender, FileSystemEventArgs e)
{
    long sizeOld = GetDirectorySize(new DirectoryInfo(e.FullPath));

    Thread.Sleep(100000);

    long sizeNew = GetDirectorySize(new DirectoryInfo(e.FullPath));

    if (sizeOld == sizeNew)
    {
        // Copying finished.
    }
}

上述方法只是每隔一分钟检查一次文件夹大小,然后比较大小。如果大小相同,则声明复制文件夹已完成。

希望能帮助到你。

于 2013-03-07T13:28:44.153 回答