根据Node 0.4.3的API文档,该fs.watchFile(filename, [options], listener)函数启动一个例程
留意变化
filename.该callback监听器将每个文件被访问时调用.
它还说
所述
options如果提供的话应该是包含两个成员的布尔对象,persistent以及interval,以毫秒为单位的轮询值
这表明它将根据间隔内的频率进行检查.但它也说
默认是
{ persistent: true, interval: 0 }.
那么这是否意味着它将检查每毫秒以查看文件时间是否已更改?它是否监听操作系统级事件?这是如何运作的?
class Program
{
static void Main(string[] args)
{
var fw = new FileSystemWatcher(@"M:\Videos\Unsorted");
fw.Created+= fw_Created;
}
static void fw_Created(object sender, FileSystemEventArgs e)
{
Console.WriteLine("added file {0}", e.Name);
}
}
Run Code Online (Sandbox Code Playgroud)
应该是非常自我解释.我正在尝试创建一个文件监视器,以便我可以自动为我排序视频...如何让程序无法终止?
我想保持它基于控制台,所以我可以调试它,但最终我想删除控制台,只是让它在后台运行(我想作为一项服务).
我做了一个小应用程序来响应文件夹中文件的更改.但是当我在Visual Studio 2008中编辑文件时,它从不会检测到任何内容.如果我在记事本中编辑文件,一切都按预期工作.
当然,Visual Studio会在某个时刻保存文件,但是当我关闭工作室时,观察者甚至不会触发.你知道我在这里缺少什么吗?
此示例代码(C#)应说明问题:
FileSystemWatcher fileSystemWatcher = new FileSystemWatcher("C:\Test", "*.cs");
WaitForChangedResult changed = fileSystemWatcher.WaitForChanged(WatcherChangeTypes.All);
Console.Out.WriteLine(changed.Name);
Run Code Online (Sandbox Code Playgroud)
我正在编写ac#program,以便在添加或删除文件时通知我.我在我的Windows 7机器上运行它并在我们的网络上观看FTP服务器.
它工作正常但会突然停止捕捉任何事件.我猜它可能正在失去与服务器的连接,或者网络中存在故障.
如何在代码中处理这种情况.是否有一些我可以观察的异常并尝试重新启动FileSystemWatcher对象.
任何建议和代码示例将不胜感激.
我希望这项工作在不同的线程中完成,但我是否必须创建一个线程或者它是否在不同的线程上完成所有工作?
喜欢:
Thread fileThread = new Thread(() =>
{
FileWatcher = new FileSystemWatcher();
FileWatcher.Created += OnFileEvent;
FileWatcher.Deleted += OnFileEvent;
FileWatcher.Renamed += OnRenameEvent;
FileWatcher.EnableRaisingEvents = true;
});
fileThread.Start();
Run Code Online (Sandbox Code Playgroud) 鉴于程序:
using System;
using System.IO;
namespace fsw_bug_poc
{
class Program
{
private static FileSystemWatcher _fileSystemWatcher;
static void Main(string[] args)
{
_fileSystemWatcher = new FileSystemWatcher("Watched", "*.*");
_fileSystemWatcher.Changed += Notify;
_fileSystemWatcher.Created += Notify;
_fileSystemWatcher.Deleted += Notify;
_fileSystemWatcher.Renamed += Notify;
_fileSystemWatcher.IncludeSubdirectories = true;
_fileSystemWatcher.EnableRaisingEvents = true;
Console.ReadKey(false);
}
private static void Notify(object sender, FileSystemEventArgs e)
{
Console.WriteLine($"{e.FullPath} {e.ChangeType}");
}
}
}
Run Code Online (Sandbox Code Playgroud)
Dockerfile:
FROM mcr.microsoft.com/dotnet/core/runtime:2.2-stretch-slim AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY ["fsw-bug-poc.csproj", ""]
RUN dotnet restore "fsw-bug-poc.csproj"
COPY . …Run Code Online (Sandbox Code Playgroud) 我有两个在同一台机器上运行的.net应用程序.第一个应用程序是"引擎".它构建图像 - 图像的大小约为4M.第二个应用程序是"查看器".它显示了"引擎"发送的图像.引擎每10-15秒发送一次图像.
我的问题是将图像从引擎传递给观看者的麻烦方法是什么.目前,我正在使用FileSystem.引擎将图像写入文件系统文件夹,并使用FileSystemWatcher将查看器获取此文件.
那方法好吗?这可靠吗?
我正在编写一个监视网络目录并且正在运行Windows Server 2008计算机的工具,FileSystemWatcher的OnChanged事件正在被任何未使用Windows 7的计算机放置在网络驱动器上的文件中正确触发因为如果在Windows 7计算机上复制的文件数量超过19(同时),那么如果文件单独完成,则不会触发任何事件.是否有解决方法或者是Windows 7内核如何处理FSW事件?
只是为了澄清它从XP机器复制时适用于数千个文件.(该软件仍在2008服务器机器上).
我正在使用FileSystemWatcher监视文件夹,如下所示:
watcher = new FileSystemWatcher(folder);
watcher.NotifyFilter = NotifyFilters.Size;
watcher.Changed += changedCallback;
Run Code Online (Sandbox Code Playgroud)
当我在该文件夹中的记事本中打开一个新文件并保存时,我会收到通知.如果我继续写作然后保存,我会收到通知.如果我保存它关闭文件,我会收到通知.正是我想要的.
但是,事实证明,如果我在该文件夹中创建一个文件并将其共享模式设置为FileShare.Read,然后我写入它,则在文件关闭之前我不会收到任何通知.另一种解决方法是打开文件(例如在记事本中),这显然会导致其状态更新,然后我的监控应用程序会收到通知.另一种解决方法是我可以在Windows资源管理器中执行刷新,这再次导致文件状态更新.
有趣的是,如果我在进行更改时查看Windows资源管理器,我会注意到:
因此,我的监控应用程序似乎与Windows资源管理器共享相同的行为.我正在考虑运行一个只扫描文件夹中文件的线程,但我想知道在这种情况下是否还有更优雅的事情要做.
顺便说一下,我正在使用Win7,我不确定这个问题是否也会在其他Windows版本上发生.
谢谢!
编辑:在C++中使用ReadDirectoryChanges得到了相同的结果.实现我之前谈到的线程并没有帮助.我想知道Windows资源管理器中的F5究竟是做什么的,因为它确实会导致报告更改.
var fsw = new FileSystemWatcher(sPath, "*.PPF");
fsw.NotifyFilter = NotifyFilters.FileName;
fsw.IncludeSubdirectories = true;
fsw.Created += FswCreated;
fsw.EnableRaisingEvents = true;
static void FswCreated(object sender, FileSystemEventArgs e)
{
string sFile = e.FullPath;
string[] arrLines = File.ReadAllLines(sFile);
}
Run Code Online (Sandbox Code Playgroud)
这对于大文件失败,因为编写文件时没有完成该过程.该文件是通过网络复制的,所以我不知道文件的大小.需要什么样的同步才能使其稳健?