Tag: filesystemwatcher

一段时间后,FileSystemWatcher停止引发事件

我们已经构建了一个使用FileSystemWatcher监听文件夹的窗口服务,在创建时我们处理文件,依此类推。 但是几天后事件就停止了。 它可能被垃圾收集器(GC)收集吗? GC是否收集持有类(单身)? 我应该使用弱事吗? 我是否有错误意味着事件未注册? 我认为问题是,FSW有一个内部缓冲区,当它溢出错误时,请看一下本文提供的代码来解决这个问题。 希望这有助于任何人。

使用.NET框架监视目录中文件更改的可靠方法

我正在寻找一种可靠的方法来查找目录中的更改。 我尝试过使用FileSystemWatcher,但是当创建,更改或删除许多小文件时,这是相当不准确的。 它错过了我测试中大约1%或2%的文件。 当您快速添加或更改数千个文件时,这是非常多的。 我已尝试以500毫秒,2000毫秒等不同间隔进行轮询更改。在这种情况下,我得到了太多的点击。 这可能与FileInfo对象上的时间戳分辨率有关。 所以我的问题是; 是否有可能使用.NET Framework可靠地获取对目录的更改? – 基督徒

FileSystemWatcher不报告锁定文件中的更改

我正在使用FileSystemWatcher监视文件夹,如下所示: watcher = new FileSystemWatcher(folder); watcher.NotifyFilter = NotifyFilters.Size; watcher.Changed += changedCallback; 当我在该文件夹中的记事本中打开一个新文件并保存时,我会收到通知。 如果我继续写作然后保存,我会收到通知。 如果我保存它关闭文件,我会收到通知。 正是我想要的。 但是,事实certificate,如果我在该文件夹中创建一个文件并将其共享模式设置为FileShare.Read,然后我写入它,则在文件关闭之前我不会收到任何通知。 另一种解决方法是打开文件(例如在记事本中),这显然会导致其状态更新,然后我的监控应用程序会收到通知。 另一种解决方法是我可以在Windows资源管理器中执行刷新,这再次导致文件状态更新。 有趣的是,如果我在进行更改时查看Windows资源管理器,我会注意到: 如果共享文件进行读写,则在保存文件后,它的大小将立即在Windows资源管理器中更新。 如果共享文件仅供读取,则不会在Windows资源管理器中立即更新其大小,除非我手动刷新窗口。 所以我的监控应用程序似乎与Windows资源管理器共享相同的行为。 我正在考虑运行一个只扫描文件夹中文件的线程,但我想知道在这种情况下是否还有更优雅的事情要做。 顺便说一句,我使用的是Win7,我也不确定其他Windows版本是否会出现此问题。 谢谢! 编辑 :在C ++中使用ReadDirectoryChanges得到了相同的结果。 实现我之前谈到的线程并没有帮助。 我想知道Windows资源管理器中的F5究竟是做什么的,因为它确实会导致报告更改。

如何为每个文件系统观察程序分配单独的线程?

我正在开发一个数据库文件系统。它包括一个多目录观察器,它是一个Windows服务,它使用来自.net的文件系统观察者类。 我想在单独的线程上运行每个观察者类。线程不能在.net中扩展,因为它是“密封”的。 我想要的是,在相关的线程中运行我的观察者类的所有方法。 我怎样才能做到这一点? 编辑 – 以下是我的基础守望者课程。 public abstract class WatcherBase { private IWatchObject _watchObject; public WatcherBase() { } public WatcherBase(IWatchObject watchObject, bool canPauseAndContinue) { _watchObject = watchObject; CanPauseAndContinue = canPauseAndContinue; } public bool CanPauseAndContinue { get; set; } public IWatchObject ObjectToWatch { get { return _watchObject; } } public abstract void Start(); public abstract […]

FTP的FileSystemWatcher

如何为FTP位置实现FileSystemWatcher (在C#中)。 这个想法是,无论何时在FTP位置添加任何内容,我都希望将其复制到本地计算机。 任何想法都会有所帮助。 这是我之前的问题的后续跟进使用.NET的选择性FTP下载 。

C#FileSystemWatcher和FTP

我通过文件系统观察器监视丢弃在ftp上的文件,然后移动到另一个目录。 现在我触发了文件系统观察者的创建事件的副本,但显然在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

C#:使用FileSystemWatcher监视复制或移动的文件

我在这里和整个网络上遇到过几个“解决方案”,但似乎都没有符合要求。 我要做的是让app监视新文件的文件夹(通过创建,移动或复制)并对这些对象执行操作。 就是这种情况,我转向FileSystemWatcher类来执行此操作。 问题是文件FileSystemWatcher.Created事件在创建整个文件之前被触发(最明显的是通过大文件的副本看到)。 有没有办法让这个事件在文件创建结束时触发而不是从头开始? 我尝试过FileSystemWatcher.NofityFilter属性的各种组合但没有成功。 提前致谢! 🙂

使用file.move重命名C#中的新文件

我对编码非常陌生,而且我正在编写一个应用程序,它会通过将毫秒附加到已经从MFD扫描的文件的现有文件名来重命名文件。 该文件夹是共享文件夹,重命名的文件应保留在其中,不能复制到其他位置。 通过大量搜索,我知道File.Move是我前进的方向,然而,我似乎无法让它工作。 这是我的代码: private void MonitorToggle_Click(object sender, EventArgs e) { // Create a new FileSystemWatcher object. FileSystemWatcher fsWatcher = new FileSystemWatcher(); switch (MonitorToggle.Text) { // Start Monitoring… case startMonitoring: if (!FilePathField.Text.Equals(String.Empty)) { //Set the watched folder path equal to the file path variable fsWatcher.Path = FilePathField.Text; // Set Filter. fsWatcher.Filter = (FileTypeField.Text.Equals(String.Empty))? “*.*” : […]

WPF DependencyObject调用线程exception

我有以下代码创建一个临时文件夹,并使用FileSystemWatcher轮询添加到Location属性上的文件夹的文件,并将它们添加到列表: Pastebin上的Scratchdisk.cs 。 我们的想法是创建一个Scratchdisk对象,并让FFmpeg将video帧提取到其中,FileSystemWatcher在FFmpeg创建它们时构建这些文件的列表,该列表显示为我的UI绑定的DependencyObject。 我像这样绑定Scratchdisk对象: … 在实际创建对象时,我得到以下exception: A first chance exception of type ‘System.InvalidOperationException’ occurred in WindowsBase.dll Additional information: The calling thread cannot access this object because a different thread owns it. 在第28行get { return (List)GetValue(FileListProperty); } get { return (List)GetValue(FileListProperty); } 我想我需要一个Dispatcher.Invoke,但我不知道在哪里,我不知道第二个线程在哪里创建。 我假设它与FileSystemWatcher写入文件列表有关。 有帮助吗? 谢谢!

C# – 预测文件夹删除时的文件系统事件

这是一个关于实现这一目标的最佳实践的问题。 我有一个FileSystemWatcher ,它应该告诉我用户对文件和文件夹的更改。 还观察了细分市场。 在同一目录中,我的程序有时也会发生变化。 我不希望FileSystemWatcher检测这些程序更改的事件。 我的第一个实现是一个列表,我可以添加预期的事件。 当我收到文件系统事件时,我检查列表并忽略它,如果它在那里。 这听起来不太健壮,但似乎有效。 现在我发现了真正的问题: D:由FileSystemWatcher监视。 我有两个这样的文件夹:D:\ folder1 \ folder2 现在我想用我的应用程序删除folder1(其中包含folder2)。 所以我把D:\ folder1放在我的删除列表中。 然后我调用Directory.Delete(@”D:\folder1″, true) 。 现在我注意到在exception中无法删除folder1(为什么有)。 我从列表中删除了删除条目,但是folder2已经被删除了,我得到了他的FileSystemEvent。 所以我得到了D:\ folder1 \ folder2的FileSystem事件。 我的程序现在认为用户已经删除了这个文件夹并且做错了。 我现在有一些想法: 1.)通过删除每个文件和每个文件夹来递归删除文件夹。 有了这个,我得到每个子文件夹并提交一个自己的列表条目。 我已经实现了它,但它非常非常慢。 2.)也许有更好的方法在FileSystemWatcher使用聪明的filter使我的列表过时了? 3.)如果可以删除所有内容,也许只能删除目录树。 所以,如果它失败了,我仍然拥有一切,如果不是,一切都被删除。 这对我来说似乎是最优雅的解决方案,但不知道这是否可行? 4.)是否可以通过我的软件专门锁定所有文件和文件夹? 如果这样就可以了,应该可以用一个删除命令删除所有内容,或者像这样删除? 我也愿意接受其他解决方案。 编辑1以使其更清晰: 我只想“看到”文件夹上的用户操作。 如果我在这里操作我的程序中的东西,我不想看到这个事件。 通过我的实现,如果文件夹被锁定且无法删除,我将获取子文件夹的事件。 用英语解释并不容易,因为我不是英语母语者;)。 编辑2: 5.)也许可以在FileSystemWatcher过滤定义过程中的所有事件?