Tag: filesystemwatcher

使用FileSystemWatcher监视多个文件夹

什么是使用C#中的FileSystemWatcher监视多个文件夹(而不是子目录)的最佳方法?

读取.NET中的文件内容更改

在Linux中,许多IPC都是通过在一个进程中附加文件并从另一个进程读取新内容来完成的。 我想在Windows / .NET中执行上述操作(使用普通的IPC如管道太麻烦)。 我将附加到Python进程中的文件,并且我想在每次FileSystemWatcher报告事件时读取更改并且只读更改。 每次我在寻找更改时,我都不想将整个文件内容读入内存(文件会很大) 每个追加操作都会附加一行数据,这些数据以唯一的递增计数器(时间戳+键)开头,并以换行符结束。

在同一台计算机上的.net应用程序之间传输大数据

我有两个在同一台机器上运行的.net应用程序。 第一个应用是’引擎’。 它构建图像 – 图像的大小约为4M。 第二个应用程序是“查看器”。 它显示了“引擎”发送的图像。 引擎每10-15秒发送一次图像。 我的问题是将图像从引擎传递给观看者的麻烦方法是什么。 目前,我正在使用FileSystem。 引擎将映像写入文件系统文件夹,并使用FileSystemWatcher将查看器获取此文件。 那方法好吗? 这可靠吗?

FileSystemWatcher和Windows 7

我正在编写一个监视网络目录并且正在运行Windows Server 2008计算机的工具,FileSystemWatcher的OnChanged事件正在被任何未使用Windows 7的计算机放置在网络驱动器上的文件中正确触发因为如果在Windows 7计算机上复制的文件数量超过19(同时),则不会发生任何事件,尽管如果文件是单独完成的,它会起作用。 有没有解决方法或者是Windows 7内核如何处理FSW事件? 只是为了澄清它适用于从XP机器复制的数千个文件。 (该软件仍在2008服务器机器上)。

BackgroundWorker&Timer,只读取日志文件的新行?

我的应用程序写入一个日志文件(目前使用log4net )。 我想设置一个计时器和一个后台工作程序来读取日志文件并将其内容打印到我的表单中的某个控件中,同时正在编写它。 我无法使用FileSystemWatcher类,因为它看起来很糟糕:有时事件“已更改”会触发,有时则不会。 它具有极低的“汇集率”。 所以我创建了一个Timer和一个FileSystemWatcher。 在计时器的“tick”事件中,后台工作人员完成其工作。 问题是: 如何只读取自上次检查工作人员以来添加的行? public LogForm() { InitializeComponent(); logWatcherTimer.Start(); } private void logWatcherTimer_Tick(object sender, EventArgs e) { FileInfo log = new FileInfo(@”C:\log.txt”); if(!logWorker.IsBusy) logWorker.RunWorkerAsync(log); } private void logWorker_DoWork(object sender, DoWorkEventArgs e) { // Read only new lines since last check. FileInfo log = (FileInfo) e.Argument; // Here is the main […]

获取已接收文件的用户名

我想获取被访问文件的用户名(添加,删除,重命名,…)。 实际上,我使用filesystemwatcher来监视文件访问,并且我已经在目录上激活了对象访问,以通过事件日志获取用户信息。 这个解决方案并不完美,因为有很多文件事件,事件日志消息也不那么详细。 写数据只有一个事件id。 它用于添加文件,重命名,移动,…每个写入数据。 另外,我必须交叉检查事件日志消息是否与filesystemwatcher事件匹配。 我宁愿更好地处理这个问题。 所以我花了很多时间googleing,阅读,…我知道stackoverflow上有另一篇文章 获取已打开文件的用户名 但我认为应该有一个可能的解决方案,因为Windows Events可以获得用户名。 阅读几页后我发现应该有一个使用netapi32.dll的可能解决方案。 http://vbcity.com/forums/t/133307.aspx?PageIndex=2上的示例代码对我不起作用。 我无法获取fileid所以我将代码更改为 private ulong GetFileIdFromPath(string filePath) { WinAPI.BY_HANDLE_FILE_INFORMATION objectFileInfo = new WinAPI.BY_HANDLE_FILE_INFORMATION(); Thread.Sleep(200); FileInfo fi = new FileInfo(filePath); FileStream fs = fi.Open(FileMode.Open, FileAccess.Read, FileShare.Read); WinAPI.GetFileInformationByHandle(fs.Handle, out objectFileInfo); fs.Close(); ulong fileIndex = ((ulong)objectFileInfo.FileIndexHigh << 32) + (ulong)objectFileInfo.FileIndexLow; return fileIndex; } 使用此代码,我能够获取fileid但是使用fileid和示例代码我无法获取用户名。

FileSystemWatcher对硬盘有什么影响?

我以前使用过FileSystemWatcher。 但是,我希望有人可以解释它实际上是如何在幕后工作的。 我打算在我正在制作的应用程序中使用它,它将监视大约5个驱动器和300,000个文件。 FileSystemWatcher是否实际上对驱动器进行“检查” – 例如,它是否会导致驱动器磨损? 它也会影响硬盘“睡眠”的能力 这是我不明白它是如何工作的地方 – 如果它像是在计时器等上扫描驱动器……或者它是否在它执行任何操作之前等待来自操作系统的某种类型的通知。 我只是不想实现一些会导致驱动器额外读取并使驱动器无法hibernate的东西。

WPF – 无法更改OnChanged方法内的GUI属性(从FileSystemWatcher触发)

我想在OnChanged方法中更改GUI属性…(实际上我试图设置图像源..但为了简单起见,这里使用了一个按钮)。 每次filesystemwatcher检测到文件中的更改时都会调用它。它会到达“top”输出..但在尝试设置按钮宽度时会捕获exception。 但如果我把相同的代码放在一个按钮..它的工作正常。 我真诚地不明白为什么..能有人帮助我吗? private void OnChanged(object source, FileSystemEventArgs e) { //prevents a double firing, known bug for filesystemwatcher try { _jsonWatcher.EnableRaisingEvents = false; FileInfo objFileInfo = new FileInfo(e.FullPath); if (!objFileInfo.Exists) return; // ignore the file open, wait for complete write //do stuff here Console.WriteLine(“top”); Test_Button.Width = 500; Console.WriteLine(“bottom”); } catch (Exception) { //do nothing […]

文件复制或移动到文件夹时,FileSystemWatcher不会引发

可能重复: 使用FileSystemWatcher检测移动的文件 我正在寻找一个观察目录的解决方案,并在新文件移入目录时通知我的应用程序。 明显的解决方案是使用.NET的FileSystemWatcher类。 但问题是,它会在文件夹中创建/删除新文件但在文件移动/复制到文件夹时不会引发事件。 任何人都可以告诉我这种行为可能是什么原因。 我的代码是 static void Main(string[] args) { Run(); } [PermissionSet(SecurityAction.Demand, Name = “FullTrust”)] public static void Run() { // Create a new FileSystemWatcher and set its properties. FileSystemWatcher watcher = new FileSystemWatcher(); watcher.Path = @”D:\New folder”; /* Watch for changes in LastAccess and LastWrite times, and the renaming of files […]

将FileSystemWatcher与多个文件一起使用

我想使用FileSystemWatcher来监视目录及其子目录中移动的文件。 然后我想在移动所有文件时触发一些代码。 但我不知道怎么做。 我的代码将在每次移动文件时触发,如果用户一次移动多个文件,我只希望它为所有文件触发一次。 所以基本上我想创建一个列表,一旦完成所有文件的移动,我想要对该列表进行操作…… 这是代码: class Monitor { private List _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!”); } } 更新:尝试使用Chris的代码,但它不起作用(请参阅我在Chris的回答中的评论): […]