FileSystemWatcher和FileCopy问题,复制后删除它

时间:2018-02-02 21:42:22

标签: c# visual-studio filesystemwatcher

我正在尝试使用Watcher查看是否在文件夹中创建了新文件,如果发生这种情况,则会将此文件本地复制到我的计算机上。我要做的是每次在文件夹中创建一个新文件时,程序会将该文件的副本创建到我的计算机中的文件夹中,当副本完成时,它会删除原始文件。

我使用了一些方法并且所有方法都运行良好,但我的团队让我可以更改目标文件夹和原始文件夹。

当程序在此步骤中并且我更改了一个路径(原点或目的地)时,它可以正常工作,但是如果我同时更改了这两个路径,则会显示以下消息:

System.UnauthorizedAccessException:'访问路径'\ MXD6C4Y7M2 \ Users \ dmontane \ Desktop \ test2 \ paco.xml'被拒绝。'

File.Copy有时会出现此问题,有时会出现File.Delete。我认为Watcher正在以错误的方式实施。请告诉我,我的代码如下。

路径值来自extern文件夹,path2值是我的计算机文件夹。 复制完成后,原始文件夹被删除,但我想让程序查看副本是否成功,如果是,则将其删除。

preg_replace("/(\d{4})([^0-9.]*)(\d)\./", "$1_", $string);

这是更改路径的按钮代码

 [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
        public static void Run()
        {
            string[] args = System.Environment.GetCommandLineArgs();

            FileSystemWatcher watcher = new FileSystemWatcher();
            FileSystemWatcher watcher2 = new FileSystemWatcher();
            try
            {
                watcher.Path = pathr;
                watcher.NotifyFilter = NotifyFilters.LastWrite;
                watcher.Filter = "*.xml*";
                watcher.Changed += new FileSystemEventHandler(OnChanged);
                watcher.EnableRaisingEvents = true;
            }
            catch (Exception e)
            {
                MessageBox.Show("Error "+e.Message);
            }
            try
            {
                watcher2.Path = path2;
                watcher2.NotifyFilter = NotifyFilters.LastWrite;
                watcher2.Filter = "*.xml*";
                watcher2.Changed += new FileSystemEventHandler(LocalChange);
                watcher2.EnableRaisingEvents = true;
            }
            catch (Exception e)
            {
                MessageBox.Show("Error " + e.Message);
            }

        }
// -----------------------------------------Define the event handlers---------------------------------------------------------------------------------------
        private static void OnChanged(object source, FileSystemEventArgs e)
        {
                              //especifica que se hace cuando un archivo se cambia crea o se borra
            Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
            sourceFile = Path.Combine(pathr, fileName);
            destFile = Path.Combine(path2, fileName);
            if (!Directory.Exists(path2))
            {
                Directory.CreateDirectory(path2);
            }
            try
            {
                File.Copy(sourceFile, destFile, true);
            }
            catch(IOException ex)
            {

            }
            cambio = true;    
        }
        private static void LocalChange(object source, FileSystemEventArgs e)
        {
            //especifica que se hace cuando un archivo se cambia crea o se borra
            sourceFile = Path.Combine(pathr, fileName);
            destFile = Path.Combine(path2, fileName);
            if (File.Exists(sourceFile))
            {

                try
                {
                    File.Delete(sourceFile);
                }
                catch (IOException ex)
                {
                    MessageBox.Show(ex.Message);

                }
            }
            cambio = true;
        }

0 个答案:

没有答案