1
zhuzhibin 2020-11-28 02:07:26 +08:00 via iPhone
有啥场景需要运用到?
|
2
Livid MOD OP |
3
falcon05 2020-11-28 02:20:40 +08:00 via iPhone
挺好的工具,我之前一直用 nodemon
|
4
ooh 2020-11-28 02:25:58 +08:00
fsnotify ?要自己写点代码
|
5
ysmood 2020-11-28 02:27:19 +08:00
一直用自己写的,entr 这种兼容性很差,比如 docker 的 volume 就不行
我这个是完全跨平台的,感觉也没必要追求无 polling,gitignore 一般就够了 https://github.com/ysmood/kit#guard |
6
Livid MOD OP |
7
b00tyhunt3r 2020-11-28 07:21:40 +08:00
@ysmood 除了 poll 以外还有别的啥实现方法吗
|
8
elfive 2020-11-28 07:37:20 +08:00 via iPhone
Windows 下,这种监视文件夹内文件状态改变的程序,都会遇到一个如果大量文件同时改变,容易漏消息的问题……如果一个消息处理不及时,就会漏掉临近的消息……
|
9
loading 2020-11-28 07:56:08 +08:00 via Android 2
|
10
janda 2020-11-28 08:20:43 +08:00
同步盘是不是就是通过这类触发的、本地有改变过文件,就会自动上传到网上同步盘!
云盘文件有改过、客户端也会自动同步回来 |
11
ysc3839 2020-11-28 08:27:48 +08:00 via Android
Windows 有同功能的 API,不过现成的软件似乎没有?
|
12
maxxfire 2020-11-28 08:44:17 +08:00
版主,你不会注册个马甲来发常规贴吗,你这样冠冕堂皇的发帖感觉怪怪的。。
|
13
vilic 2020-11-28 09:06:25 +08:00
Facebook 有个 watchman https://facebook.github.io/watchman/
|
14
MeteorCat 2020-11-28 09:59:45 +08:00 via Android
git 版本变动就行了
|
16
kimdir 2020-11-28 10:03:13 +08:00 via iPhone
付费的 hazel 是不是也是这个作用
|
17
Jirajine 2020-11-28 10:04:13 +08:00 via Android 2
|
18
zander 2020-11-28 10:08:14 +08:00
正好手头有一些需求,不过这个对十万级文件量的文件夹支持的好吗。
|
19
pengfei 2020-11-28 10:17:16 +08:00 1
https://stackoverflow.com/questions/9402908/java-7-watch-service
我发 java 是不是显得不是很合群 |
20
janda 2020-11-28 10:41:43 +08:00
|
21
shuax 2020-11-28 10:53:33 +08:00
::ReadDirectoryChangesW(dir, ¬ify, sizeof(notify), TRUE, FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME, &dwBytes, &overlapped, NULL);
主要就这一个 API |
22
billzhuang 2020-11-28 11:11:40 +08:00
这类 filewatcher 我记得都有个头痛的问题,就是如果监控的跟目录被删除了,再新建就不会再监控了,要手动处理
|
23
menyakun 2020-11-28 15:56:54 +08:00
我在 mac 和 linux 下用的是 fswatch,我看官方 readme 里面也有 windows 的,不知道行不行
|
24
ysmood 2020-11-29 00:50:27 +08:00
@b00tyhunt3r @loading 目前来讲 poll 是最稳定的方式,类似 FileSystemWatcher,fsnotify 之类的都有诸多兼容问题,比如 fsnotify 自己都说对 mac 支持不好。要是有人能有更好的解决方案我倒是很想学习下。
|
25
guochao 2020-11-29 21:07:16 +08:00
Windows 下面有个 Everything 工具,推荐。其中的原理是读取 NTFS 的 USN 日志。我胡乱搜了一下: https://blog.csdn.net/kaooo/article/details/8298537
对于 Linux 来说内核的 inotify 可以保证每个订阅的修改都通知到程序,Mac/BSD 的大概是 kqueue+fsevents |
27
Mithril 2020-11-30 07:40:48 +08:00
@elfive 目前用 FileSystemWatcher 没发现这个问题,不要在消息响应里面写太多东西,直接接到你自己的消息队列里再处理就可以了。
我基本上每次弄进去几千上万的小文件没见出过问题。 |
28
abersheeran 2020-11-30 09:07:40 +08:00
Python 有一个 watchdog 的模块,它自带的命令就可以做到你说的这个。如果有更复杂的需求,你甚至可以写几行 Python 代码来解决。并且,Mac 、Linux 、Windows 都支持。
|
29
wangdk23411 2020-11-30 10:15:33 +08:00
不错,可以放在 ftp 流程后面做分类处理
|
30
q197 2020-11-30 10:53:07 +08:00
uwp 也有个函数
|
32
nnnToTnnn 2020-11-30 11:13:05 +08:00
QT 有一个 QFileSystemWatcher 感觉也挺方便的。
|
33
digimoon 2020-11-30 11:15:03 +08:00
linux 上我用 inotify,但是这个不能在挂载的网络目录用例如 smb,这个能解决么
|
35
LDa 2020-12-01 04:50:57 +08:00 via iPhone
插个眼,明天下午来收割方案
|
36
ob 2020-12-10 22:20:57 +08:00
NewFileGo 可以一试:
http://www.joejoesoft.com/vcms/170/ |