Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要在它之后复制文件';人的创造与变化_C#_Filesystemwatcher - Fatal编程技术网

C# 需要在它之后复制文件';人的创造与变化

C# 需要在它之后复制文件';人的创造与变化,c#,filesystemwatcher,C#,Filesystemwatcher,我需要在创建和更改两次后复制一个文件 我不知道怎么做,除了使用3个文件系统。第一个是创造,第二个是改变 有什么更简单的方法吗?FileSystemWatcher有一个可以用来监听文件系统上不同类型事件的方法。还有一个属性,您可以使用它指定应该监视哪些事件类型 所以你不需要使用三个不同的观察者;一个就够了。您只需要某种形式的计数器来跟踪对文件进行了多少更改。下面是一个简单的例子: Dictionary<string, int> changeCounter = new Dictionar

我需要在创建和更改两次后复制一个文件

我不知道怎么做,除了使用3个文件系统。第一个是创造,第二个是改变


有什么更简单的方法吗?

FileSystemWatcher有一个可以用来监听文件系统上不同类型事件的方法。还有一个属性,您可以使用它指定应该监视哪些事件类型

所以你不需要使用三个不同的观察者;一个就够了。您只需要某种形式的计数器来跟踪对文件进行了多少更改。下面是一个简单的例子:

Dictionary<string, int> changeCounter = new Dictionary<string, int>();

...

FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = @"C:\Path\To\Some\Folder";
watcher.NotifyFilter = NotifyFilters.CreationTime | NotifyFilters.LastWrite;
watcher.Created += OnCreated;
watcher.Changed += OnChanged;

...

private void OnCreated(object source, FileSystemEventArgs e)
{
    changeCounter.Add(e.FullPath, 0);
}
private void OnChanged(object source, FileSystemEventArgs e)
{
    if (changeCounter.ContainsKey(e.FullPath))
    {
        changeCounter[e.FullPath]++;
        if (changeCounter[e.FullPath] == 2) 
        {
            CopyFile(e.FullPath);
        }
    }
}
字典更改计数器=新字典();
...
FileSystemWatcher watcher=新的FileSystemWatcher();
Path=@“C:\Path\To\Some\Folder”;
watcher.NotifyFilter=NotifyFilters.CreationTime | NotifyFilters.LastWrite;
watcher.Created+=OnCreated;
watcher.Changed+=OnChanged;
...
已创建私有void(对象源、文件系统目标)
{
changeconter.Add(e.FullPath,0);
}
私有void OnChanged(对象源、文件系统目标)
{
if(changeCounter.ContainsKey(如完整路径))
{
变更计数器[e.完整路径]++;
if(changeCounter[e.FullPath]==2)
{
复制文件(例如完整路径);
}
}
}

这将仅在观察者检测到单个文件的文件创建事件和两个文件更改事件后调用
CopyFile
。您可能还需要修改句柄删除,以防担心文件被创建一次、编辑、删除、重新创建和编辑,这将触发
CopyFile
,即使从技术上讲,文件在创建后只被编辑过一次。

一个文件系统就足够了。但是除了给你写,我们还能怎么回答呢?