我正在尝试使用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;
}