C# 获取文件或文件夹复制完成的状态
我计划开发一个文件组织软件,检测文件到达特殊文件夹,并将这些文件复制到特定文件夹(Ex.txt文件进入文本文档文件夹)。我正在使用C# 获取文件或文件夹复制完成的状态,c#,copy,detection,filesystemwatcher,C#,Copy,Detection,Filesystemwatcher,我计划开发一个文件组织软件,检测文件到达特殊文件夹,并将这些文件复制到特定文件夹(Ex.txt文件进入文本文档文件夹)。我正在使用FileSystemWatcher 用于检测文件。因此,我想知道文件或文件夹复制操作(手动复制文件或文件夹)是否由C#代码完成 用单文件程序就可以了。但是对于多个文件需要改进程序 我使用这个循环来检查文件是否已发布,但对于大文件,这会使程序没有响应 void File_move(string source,string destination) {
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事件或类似的内容(或上次访问日期,尽管我也认为它在复制开始时设置了一次)。但是,您需要知道复制何时停止(可能是在没有文件大小更改事件的一段时间之后)。