如何让它在网络中运行?它工作然后它没有理由停止工作(可能因为网络不完美).
有些东西引起了我的注意,我没有找到任何资源.
FileSystemWatcher如何知道何时创建/删除/更改/重命名计算机上的文件"A"?
我认为这适用于轮询,(观察者轮询服务器以检查更新),但在使用Wireshark验证网络活动后,我看到没有使用轮询.SMB协议是否使用可观察/观察者模式?
在这种情况下,服务器如何知道客户端何时不再观察他?
当网络在观察期间跌落并且在之后立即返回时会产生什么后果?
在另一台计算机上使用FileSystemWatcher似乎太容易实现了......
我正在使用FileSystemWatcher来监视文件夹.但是当目录中发生某些事件时,我不知道如何搜索谁对该文件产生了影响.我试着使用EventLog.它无法正常工作.还有另一种方法吗?
经过一个FileSystemWatcher.Error引发事件,我不知道下一步该怎么做的线索.例外可以是[相对]次要的,例如
目录中一次更改太多
这不会影响观察者的观看过程,但它也可能是一个大问题 - 例如被监视的目录被删除,在这种情况下观察者不再起作用.
我的问题是处理Error事件的最佳方法是什么?
我正在尝试在我的沙盒应用程序中使用FSEvents来监视某些目录.我实现了以下类:
@implementation SNTracker
- (id)initWithPaths:(NSArray *)paths {
self=[super init];
if (self) {
trackedPaths=paths;
CFTimeInterval latency=1.0;
FSEventStreamContext context={0,(__bridge void *)self,NULL,NULL,NULL};
FSEventStreamRef eeventStream=FSEventStreamCreate(kCFAllocatorDefault,&callback,&context,(__bridge CFArrayRef)trackedPaths,kFSEventStreamEventIdSinceNow,latency,kFSEventStreamCreateFlagUseCFTypes|kFSEventStreamCreateFlagWatchRoot|kFSEventStreamCreateFlagFileEvents);
FSEventStreamScheduleWithRunLoop(eeventStream,[[NSRunLoop mainRunLoop] getCFRunLoop],kCFRunLoopDefaultMode);
FSEventStreamStart(eeventStream);
}
return self;
}
static void callback(ConstFSEventStreamRef streamRef,void *clientCallBackInfo,size_t numEvents,void *eventPaths,const FSEventStreamEventFlags eventFlags[],const FSEventStreamEventId eventIds[]) {
NSLog(@"asd");
}
Run Code Online (Sandbox Code Playgroud)
问题是"asd"永远不会被打印出来(即永远不会调用回调函数).当我在Xcode中的主要目标摘要中禁用"启用应用程序沙箱"时,将调用回调.难道我做错了什么?我给沙盒应用程序的唯一权利是对用户所选文件的读写访问权限.
我有一个Windows服务,需要监视目录中的文件,然后将其移动到另一个目录.我正在使用FileSystemWatcher来实现它.
这是我的主要服务类.
public partial class SqlProcessService : ServiceBase
{
public SqlProcessService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
FileProcesser fp = new FileProcesser(ConfigurationManager.AppSettings["FromPath"]);
fp.Watch();
}
protected override void OnStop()
{
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的FileProcessor类
public class FileProcesser
{
FileSystemWatcher watcher;
string directoryToWatch;
public FileProcesser(string path)
{
this.watcher = new FileSystemWatcher();
this.directoryToWatch = path;
}
public void Watch()
{
watcher.Path = directoryToWatch;
watcher.NotifyFilter = NotifyFilters.LastAccess |
NotifyFilters.LastWrite |
NotifyFilters.FileName |
NotifyFilters.DirectoryName;
watcher.Filter = "*.*";
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += …Run Code Online (Sandbox Code Playgroud) 我正在使用express-ws https://www.npmjs.com/package/express-ws(有助于为express和websocket客户端创建服务器的API).
app.ws('/', function(ws, req) {
console.log("New connection")
if (content.length > 0) {
console.log(content)
ws.send(content)
}
ws.on('message', function(msg, flags) {
console.log("Received "+ msg);
});
ws.on('data', function(msg, flags) {
var data = []; // List of Buffer objects
res.on("data", function(chunk) {
data.push(chunk); // Append Buffer object
console.log(data)
})
})
});
Run Code Online (Sandbox Code Playgroud)
现在您可以看到上面的代码,无论何时创建连接,它都会检查内容的长度,并在超过0时向客户端发送conetent.
遵循路由器代码,在Web请求上更新文件.如果在连接创建后的某个时间(如果此文件被修改),此连接不知道它,因此不会调用此函数,因此不会调用send函数.我也试过fs.watch但是我无法让它工作.
router.post('/run_restart', function(req, res, next) {
text = '{"to_do": "run_test", "devices":"all", "argv": { "test": "' + req.body.cmd + '", "cycles": "' + req.body.cycles + '", "awake_for": "' + req.body.wt …Run Code Online (Sandbox Code Playgroud) 出于某种原因,我无法从FileSystemWatcher中删除事件处理程序.
这就是我所拥有的
void Start()
{
ivFileSystemWatcher = new FileSystemWatcher();
ivFileSystemWatcher.Changed +=
new FileSystemEventHandler(ivFileSystemWatcher_Changed);
}
void Stop()
{
ivFileSystemWatcher.Changed -=
new FileSystemEventHandler(ivFileSystemWatcher_Changed);
ivFileSystemWatcher.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
当我打电话给开始时,我开始接收更改事件,但是当我呼叫停止时,我希望事件停止,但它们仍在被提升.
我正在创建一个使用 FileSystemWatcher 的 Windows 应用程序。FileSystemWatcher 观察一些目录的变化。每次将某个文件添加到此目录时,FileSystemWatcher 都必须将有关此文件的信息添加到 XML 文件中。一切正常,但是,例如,当我同时添加 100 个文件时(比如某些应用程序将这些文件添加到目录中),并不是每个文件的信息都出现在这个 xml 文件中。
我想使用队列。并使用它向此集合添加项目。并使用计时器。计时器将从该集合向 XML 添加信息。这是个好主意吗?
谁能建议我该怎么做?
所以我认为我必须创建一个 Windows 应用程序和一个 Windows 服务。WinApp 只会向 EventLog 添加信息,Windows Service 会读取信息 EventLog 并将其写入 XML。我认为这将是最好的方法。我在等待好的建议
正如所示这篇文章,FileSystemWatcher是不可靠的,因为Windows磁盘缓存的.海报显示,无论优化和InternalBufferSize如何,该类错过了大约0.15% - 0.35%的所有事件.即使是驱动程序也会受此影响,因此它本身并不是FileSystemWatcher的错误.
海报提出了解决这个问题的方法 - 冲洗整个卷.但是我不想这样做 - 缓存是有原因的,它需要管理员权限.是否可以只刷新被监视的目录并获得使FileSystemWatcher 100%准确的相同结果?我对FlushFileBuffers知之甚少,但海报的解决方案专门刷新整个卷,即使只是刷新目录显然是一个更好的解决方案.
有没有.NET方法来刷新目录或指定的文件(未打开)?我的意思是真正的刷新,它等待磁盘本身的确认.例如,FileStream.Flush(无效),刷新刚刚在.NET的缓冲区,而不是OS缓冲(不像FileStream.Flush(布尔)与真正的参数在.NET 4和更好).我想刷新其他应用程序打开的文件.
如果没有,是否甚至可以使用FlushFileBuffers来刷新目录(也许它只支持文件和卷,但这会很奇怪)?此外,非管理员解决方案将非常理想,因为在管理模式下我可以使用Change Journal.