[英]File.Move() closes Console window automatically in C#
我有一个简单的C#控制台应用程序,其中使用FileSystemWatcher,并在创建文件时将文件从一种设计移动到另一种。 我的代码如下所示:
public static void WatchForFiles()
{
FileSystemWatcher watcher = new FileSystemWatcher();
//folder path is path to folder
watcher.Path = folderPath;
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
//Add event handlers
watcher.Created += new FileSystemEventHandler(File_OnChanged);
//Begin watching
watcher.EnableRaisingEvents = true;
}
public static void File_OnChanged(object sender, FileSystemEventArgs e)
{
//destiantion path is path to folder
string destiantionFileFullPath = destianationPath + e.Name;
if (!File.Exists(destiantionFileFullPath))
{
File.Move(e.FullPath, destiantionFileFullPath);
}
}
当我第一次复制文件时,它会正常移动。 但是之后,或者如果我复制两个或更多文件,我的控制台窗口将自动关闭。 我想应该使用IAsyncResult,但我不知道如何。 我尝试了Tasks,但没有帮助。 先复制文件然后删除也无济于事。 是什么原因造成的?如何预防? 提前致谢
从经验来看,使用FileWatcher监视文件转储和(可能)移动时的麻烦比人们想要管理的麻烦更多。 原因很简单,如果在应用程序关闭时将文件转储到目录中,则FileWatcher不会捕获它们。 我更喜欢使用一个定时轮询的计时器,检查目录中是否有文件并将其移动。 使用这种方法,如果在应用程序关闭时(例如出于维护目的)将新文件转储到文件夹中,则将在应用程序重新启动并且计时器开始轮询后立即将它们移动。
不复制两个文件:在复制一个文件时,将创建另一个文件,但是禁用引发事件,因此不会通知您该事件。
尝试扫描File_OnChanged
的目录,然后您将捕获该目录。
为什么退出? 我认为它引发了一个异常,可能是写入过程尚未完成,您已经在访问该文件了-可能不允许这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.