2010-11-01 57 views
4

我正在修改UNIX系统上的文件并在Windows上访问它们。服务器运行samba,并且客户端执行一些缓存。当我在UNIX端修改文件时,查看新版本文件的唯一可靠方法是在Windows资源管理器中右键单击并选择“刷新”。击败Windows上的CIFS文件缓存/强制“刷新”

我正在寻找在Windows资源管理器中右键单击并选择“刷新”的Windows API等效项。关于向资源管理器发送消息以使其刷新还有其他一些问题,但这不是我想要的:我不关心资源管理器窗口的内容,我宁愿甚至不需要向目标打开一个目录。我只是想将缓存破坏效果集成到我的程序中,以免看到过时的数据。

回答

4

CIFS包含更新通知系统。 Explorer为此注册,并将反映Samba发送它的任何更改。我不知道有任何其他API机制可以告诉Windows它需要刷新。

Samba支持Linux inotify,所以它应该会自动接收Explorer正在显示的文件夹的任何更改并发送Explorer更新。

您使用的是最近版本的Samba,并且Samba是使用inotify支持构建的吗?这显然只有Linux。对于另一个Unix,您可以实现等效的功能。相关代码在smbd/notify_internal.c

+0

我在FreeBSD上,我没有配置FAM_SUPPORT(“文件修改监视器”)。看起来我应该升级桑巴并尝试启用它。 – 2010-11-01 18:27:35

+1

我升级了桑巴舞,这是平常的眼泪(诅咒谁加入'passdb后端',并默认它为不兼容的设置)。我*几乎*得到gamin做某事但不完全。考虑到我没有在任何地方看到所需的'vfs objects = notify_fam',我并没有抱有很大的希望。所以你可能是对的,但我无法验证你的解决方案。 – 2010-11-02 07:55:17

+0

我证实,这与linux + samba所描述的一样,所以这显然是最好的解决方案。 – 2010-11-04 17:11:52