标签: filesystemwatcher

C#FileSystemWatcher和FTP

我通过文件系统观察器监视丢弃在ftp上的文件,然后移动到另一个目录.现在我触发了文件系统观察者的create事件的副本,但显然在ftp的情况下,create只是一个存根文件,数据进入并填充文件,因为它上传到完成.任何人都有一个优雅的解决方案,或者我必须做我认为我必须做的事情

1 wait till last access time is about n ms in past before I copy
2 throw a control file in there to state that that file is done being copied, then delete control file
3 pound the crap out of it
Run Code Online (Sandbox Code Playgroud)

c# ftp filesystemwatcher

7
推荐指数
1
解决办法
1万
查看次数

当许多文件同时添加到目录时,FileSystemWatcher无法正常工作

当许多文件同时添加到目录时,FileSystemWatcher无法正常工作......

Watcher根本找不到目录中的所有文件 - 只有当文件一个接一个地放在文件夹中时 - 而不是同时将大量文件复制到文件夹中...

Threads的创建是问题的解决方案还是有另一种方法来处理问题?

c# filesystemwatcher

7
推荐指数
1
解决办法
5932
查看次数

FileSystemEventHandler的其他参数

我正在尝试编写一个程序,可以监视多个文件夹以进行文件创建,并启动相同的操作,但每个文件夹的设置不同.我的问题是为FileSystemEventHandler指定一个额外的参数.我为每个目录创建一个新的FileWatcher来监视并添加Created-action的处理程序:

foreach (String config in configs)
{
    ...
    FileWatcher.Created += new System.IO.FileSystemEventHandler(FileSystemWatcherCreated)
    ...
}

void FileSystemWatcherCreated(object sender, System.IO.FileSystemEventArgs e, MySettings mSettings)
{
    DoSomething(e.FullPath, mSettings);
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能将'mSettings'变量传递给FileSystemWatcherCreated()?

c# filesystemwatcher

7
推荐指数
2
解决办法
6526
查看次数

禁用FileSystemWatcher进行特定更新?

当我的应用程序对目录中的文件进行更改时,有没有人有任何想法如何可靠地禁用FileSystemWatcher对象,以便我只关注对目录的外部更改?

我已经尝试EnableRaisingEvents在执行写入之前立即设置为false并在之后立即将其设置为true,但似乎这种方法不可靠,偶尔我仍然会触发事件.

我能想到的唯一另一件事就是在执行写操作后等待一小段时间让操作系统在重新启用FSW之前完成目录的修改,但这似乎是hackish而我不喜欢它.


要添加问题,该目录可能包含许多文件,其身份超出了我的知识和控制范围,因此我不能等待事件触发特定文件然后忽略它.一次修改后可能会触发任意数量的FSW事件(因为可能有许多文件被更新).

.net c# filesystemwatcher

7
推荐指数
1
解决办法
1446
查看次数

FileSystemWatcher - 第二次不触发事件

我有启动其他应用程序的应用程序,然后等待他们创造一个特定的数据文件(其手表一次在一个应用程序).每次启动应用程序时,它都会监视要创建的特定文件的特定目录.我正在使用FileSystemWatcher执行此操作(将其设置为目录,然后筛选正确的文件名).这是第一次(总是)很好用,但是第二次启动的应用程序永远不会激活事件.它似乎触发事件的唯一方法是,如果我在事件处理程序中放置一个断点,或者如果我在事件处理程序中有一个Thread.Sleep命令.这对我来说似乎很奇怪......是否有一些我不知道的竞争条件?这是代码.注意我有一个Thread.Sleep(500).有了这一行,代码每次都有效.没有它会失败.我真的不习惯依赖睡眠命令.我不确定什么条件会导致不能正常工作.

    public static void watchFiles(string path)
    {
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.Path = path;
        watcher.Created += new FileSystemEventHandler(watcher_Handler);
        watcher.EnableRaisingEvents = true;
   }

    public static void watcher_Handler(object sender, FileSystemEventArgs e)
    {
        //Hack - the sleep allows the second and third application to be caught by this event
        Thread.Sleep(500);

        switch (e.ChangeType.ToString())
        {
            case "Changed":
                break;
            case "Deleted":
                break;
            case "Created":
                if (e.Name == "log.dat")
                {
                    parseDataFile();
                    moveHTMLtoLMS();

                }
                break;
            default:
                break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

任何人都知道我为什么需要睡眠(或断点)才能让代码第二次运行?

c# filesystemwatcher

7
推荐指数
1
解决办法
3833
查看次数

FileSystemWatcher超越了文件系统权限

在尝试使用FileSystemWatcher时,我发现它以某种方式超越了我的用户帐户对文件和文件夹的权限,并且会引发更改事件,其中包含有关您甚至无法访问的文件和文件夹中已更改内容的信息.

我有两个问题:

1)为什么会这样?
2)这是AD配置中的问题吗?我如何解决它 ?
3)有没有办法收集这些文件,甚至创建它们的FileSystemInfo以获取有关文件的更多信息(不仅仅是对它们所做的更改)?

据我所知,只有FileSystemWatcher免受限制,我不能对它运行任何其他东西,这里是我尝试过的列表:

  • 文件已存在
  • Directory.Exists
  • 找到的文件上的FileInfo实例
  • 找到的文件上的DirectoryInfo实例
  • File.Copy
  • File.Delete

更新:尝试了helge的解决方案,有些类似于他的sugested,不是通过windows的api,而是通过命令提示符:

robocopy/B\myserver\folder c:\ somefolder

最好的命令名称.

你可以通过robocopy来检查/ B代表"备份模式",这就是帮助这种安全性超越的原因.

我会尝试任何东西,我想找出究竟是什么导致FileSystemWatcher能够观看我无权打开的文件夹.知道原因,我想学习如何阻止FileSystemWatcher,以及如何收集找到的文件.

如果我使用我的个人账户,我会进行调查.拜托,有人可以帮帮我吗?我将写一篇关于解决方案的博客文章,其中包括可能有助于未来同样怀疑的任何人.

c# security filesystemwatcher active-directory visual-studio

7
推荐指数
1
解决办法
1608
查看次数

将FileSystemWatcher与多个文件一起使用

我想使用FileSystemWatcher来监视目录及其子目录中移动的文件.然后我想在移动所有文件时触发一些代码.但我不知道怎么做.我的代码将在每次移动文件时触发,如果用户一次移动多个文件,我只希望它为所有文件触发一次.所以基本上我想要创建一个列表,一旦完成所有文件的移动,我想对该列表做一些事情......

这是代码:

class Monitor
{
    private List<string> _filePaths;  
    public void CreateWatcher(string path)
    {
        FileSystemWatcher watcher = new FileSystemWatcher();

        watcher.Filter = "*.*";

        watcher.Created += new
        FileSystemEventHandler(watcher_FileCreated);

        watcher.Path = path;
        watcher.IncludeSubdirectories = true;

        watcher.EnableRaisingEvents = true;
    }

    void watcher_FileCreated(object sender, FileSystemEventArgs e)
    {
        _filePaths.Add(e.FullPath);
        Console.WriteLine("Files have been created or moved!");
    }

}
Run Code Online (Sandbox Code Playgroud)

更新:尝试使用Chris的代码,但它不起作用(请参阅我在Chris的回答中的评论):

class Monitor
    {
        private List<string> _filePaths;
        private Timer _notificationTimer;
        private FileSystemWatcher _fsw;
        public Monitor(string path)
        {
            _notificationTimer = new Timer();
            _notificationTimer.Elapsed += notificationTimer_Elapsed;
            // CooldownSeconds is the number of …
Run Code Online (Sandbox Code Playgroud)

c# filesystemwatcher

7
推荐指数
2
解决办法
2万
查看次数

在删除之前访问文件

在使用FileSystemWatcher.OnDeleted事件时,是否可以在删除文件之前访问该文件?

我将关于文档本身的一些数据存储在其元数据中,并且在删除之前我需要该信息.

任何想法FileSystemWatcher如果有甚至可能有或没有完成这个?

更新://

我意识到将数据存储在文件中是不好的,因为我删除文件时无法访问它.

解决方案:重写我的应用程序存储在本地数据库中的数据(源码/ XML或类似的东西),因为我得到的完整路径和名称正在创建文件时/重命名/更新/删除它会更容易更新数据库记录文件.

感谢所有的想法和建议!

c# windows filesystemwatcher .net-4.0

7
推荐指数
1
解决办法
1365
查看次数

FileSystemWatcher文件位于子目录中

如果文件被创建,复制或移动到我正在观看的目录中,我正在尝试收到通知.我只希望收到有关文件的通知,而不是目录.

这是我目前的一些代码:

_watcher.NotifyFilter = NotifyFilters.FileName;
_watcher.Created += new FileSystemEventHandler(file_created);
_watcher.Changed += new FileSystemEventHandler(file_created);
_watcher.Renamed += new RenamedEventHandler(file_created);
_watcher.IncludeSubdirectories = true;
_watcher.EnableRaisingEvents = true;
Run Code Online (Sandbox Code Playgroud)

问题是,如果我移动一个包含文件的目录,我就不会收到该文件的任何事件.

如何通知我所有添加的文件(无论如何)到监视目录或它的子目录?

Incase我没有解释得足够好......我有WatchedDirectoryDirectory1.Directory1包含Hello.txt.如果我将Directory1移动到WatchedDirectory,我希望收到Hello.txt的通知.

编辑:我应该注意我的操作系统是Windows 8.而且我确实收到了复制/粘贴事件的通知,但没有移动事件(拖放到文件夹中).

c# filesystemwatcher

7
推荐指数
1
解决办法
9056
查看次数

如何使用Python Watchdog在目录中发生任何变化时运行函数?

我试图使用看门狗在dir中发生任何变化时运行同步脚本(除了一个特定文件).我只是复制了自述文件中的代码(粘贴在下面),它完成了它所说的内容; 记录哪个文件已更改.

import sys
import time
import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler

if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s - %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S')
    path = sys.argv[1] if len(sys.argv) > 1 else '.'
    event_handler = LoggingEventHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()
Run Code Online (Sandbox Code Playgroud)

我现在想要在任何变化时运行一个函数(它将整个文件夹同步到远程机器).所以我只event_handler用我自己的功能代替了.但是这给了我以下错误:

Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 810, in __bootstrap_inner
    self.run()
  File "/Library/Python/2.7/site-packages/watchdog/observers/api.py", line 199, in run
    self.dispatch_events(self.event_queue, self.timeout)
  File "/Library/Python/2.7/site-packages/watchdog/observers/api.py", …
Run Code Online (Sandbox Code Playgroud)

python filesystems filesystemwatcher watchdog python-watchdog

7
推荐指数
2
解决办法
4443
查看次数