繁体   English   中英

File.Move()在C#中自动关闭控制台窗口

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM