【发布时间】:2015-12-17 03:25:59
【问题描述】:
我正在使用 FileSystemWatcher 来监视将用于进行某些文件重命名的文件夹。
唯一会被复制的是包含文件的文件夹。不会有单个文件放入受监视的文件夹中。这是设置 FileSystemWatcher 的代码
watcher.Path = path;
watcher.NotifyFilter = NotifyFilters.DirectoryName | NotifyFilters.FileName;
watcher.IncludeSubdirectories = true;
watcher.Filter = "*.*";
watcher.Created += new FileSystemEventHandler(watcher_Created);
watcher.Changed += new FileSystemEventHandler(watcher_Changed);
watcher.Renamed += new RenamedEventHandler(watcher_Renamed);
watcher.EnableRaisingEvents = true;
此设置似乎没有任何问题..
被复制的文件夹大小可以在 50-200mb 之间。有没有办法在开始重命名过程之前检查/确保所有文件都已完成复制。 我试过这个想法,如果在调用 GetFiles() 时复制仍在发生,我会得到一个 IOException。
bool finishedCopying = false;
while (!finishedCopying)
{
try
{
List<FileInfo> fileList = directoryInfo.GetFiles().ToList();
AlbumSearch newAlbum = new AlbumSearch(directoryInfo);
return newAlbum;
}
catch (IOException)
{
finishedCopying = false;
}
}
如果需要更多信息,请询问我可以提供的信息。
Ta。
【问题讨论】:
-
我认为您实际上是在要求时间机器。
IsSomeOtherProcessPlanningToWriteMoreFilesToThisLocation是一个很难编写的函数。 -
这是不可能的。没有办法区分用户暂时暂停执行移动/复制的程序和他连续两次运行它之间的区别。您对执行此操作的过程一无所知,不要做任何假设。
-
我希望情况并非如此。我希望在复制过程中可能有一些东西可以访问以从源文件夹中获取信息。甚至像文件数量这样的东西......
-
根据访问源文件的能力和/或执行写入的系统,您可能会计算文件夹中内容的校验和,并在特定时间间隔将其与目的地的校验和。如果它们匹配,则复制将被验证。
标签: c# filesystemwatcher copying