C# 获取文件或文件夹复制完成的状态

C# 获取文件或文件夹复制完成的状态,c#,copy,detection,filesystemwatcher,C#,Copy,Detection,Filesystemwatcher,我计划开发一个文件组织软件,检测文件到达特殊文件夹,并将这些文件复制到特定文件夹(Ex.txt文件进入文本文档文件夹)。我正在使用FileSystemWatcher 用于检测文件。因此,我想知道文件或文件夹复制操作(手动复制文件或文件夹)是否由C#代码完成 用单文件程序就可以了。但是对于多个文件需要改进程序 我使用这个循环来检查文件是否已发布,但对于大文件,这会使程序没有响应 void File_move(string source,string destination) {

我计划开发一个文件组织软件,检测文件到达特殊文件夹,并将这些文件复制到特定文件夹(Ex.txt文件进入文本文档文件夹)。我正在使用
FileSystemWatcher

用于检测文件。因此,我想知道文件或文件夹复制操作(手动复制文件或文件夹)是否由C#代码完成

用单文件程序就可以了。但是对于多个文件需要改进程序

我使用这个循环来检查文件是否已发布,但对于大文件,这会使程序没有响应

void File_move(string source,string destination)
        {
            EE:
                try
                {
                    File.Move(source, destination);
                }
                catch (Exception ex)
                {
                    lblStatus.Text = "Waiting for file copping complete";
                    Application.DoEvents();
                    goto EE;
                }

        }

过了很长时间,我找到了解决我自己问题的办法。下面是c#和vb.net中获取文件复制进度的链接

在这个示例代码中,我们可以获得复制文件的进度

private CopyProgressResult CopyProgressHandler(long total, long transferred, long streamSize, long StreamByteTrans, uint dwStreamNumber,CopyProgressCallbackReason reason, IntPtr hSourceFile, IntPtr hDestinationFile, IntPtr lpData)
    {
        Progressbar.Max=Convert.ToInt32(total);
        Progressbar.Value=Convert.ToInt32(transferred);
        Application.Doevents();
        return CopyProgressResult.PROGRESS_CONTINUE;
    }

long total表示总大小,long Transfer表示当前进度

无法获取操作的当前运行状态。但是FileSystemWatcher应该在创建文件时引发一个“Created”事件或其他事件——问题是,我认为它是在复制刚刚开始并正在运行时创建的。这就是你的意思吗?你是对的。它是在复制刚开始时创建的。。。我在谷歌上搜索了很多。我不认为会有答案。感谢回复您可以继续收听FileSizeChanged事件或类似的内容(或上次访问日期,尽管我也认为它在复制开始时设置了一次)。但是,您需要知道复制何时停止(可能是在没有文件大小更改事件的一段时间之后)。