跪求大神!文件监控问题。悬赏分不是问题。

tengerye 2012-07-17 09:09:38
1.指定一个文件之后,对该文件进行监控。对文件的复制、移动、剪切、删除、重命名和从回收站恢复都能有所反应。例如:复制记录下源地址和目标地址。
2.指定一个文件夹之后,对该文件夹的所有文件监控。
3.肯定要用windows service实现。
4.对文件的监控操作既包括用户的操作(clipboard)以及其他程序的操作。
现在求技术思路,不需要大段代码。
...全文
386 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
fronz 2012-07-26
  • 打赏
  • 举报
回复
这个真是有难度的问题,关注!
,用单一的实现方式来说可能不会很完整,要完整做到恐怕还真是驱动层了。
fangchao918628 2012-07-26
  • 打赏
  • 举报
回复
FILE_ACTION_RENAMED_OLD_NAME 消息当前得到的FILE_NOTIFY_INFORMATION 地址加上他的成员 NextEntryOffset得到下一个记录,这个记录好像是FILE_ACTION_RENAMED_NEW_NAME 你在获取它的
FILE_NOTIFY_INFORMATION 从中获取新的文件名
tengerye 2012-07-26
  • 打赏
  • 举报
回复
跪求各路大神:
真的很急啊!FILE_NOTIFY_INFORMATION结构体中的Action成员可以FILE_ACTION_RENAMED_OLD_NAME消息,可是却收不到FILE_ACTION_RENAMED_NEW_NAME这个消息。
CSDN如下解释:
If the new name resides within the directory being monitored, the client will also receive the FILE_ACTION_RENAMED_NEW_NAME as described below. If the new name resides outside of the directory being monitored, the client will not receive the FILE_ACTION_RENAMED_NEW_NAME.
可以我想破脑袋都不明白,一个文件名字被修改,修改之前的名字和之后的名字肯定都是在同一个路径下嘛,怎么会一个收得到一个收不到呢?
各路大神旧真的没有遇到过这种情况吗?
wltg2001 2012-07-26
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

谢谢8楼和11楼,但是请恕我愚昧。到底是采用文件过滤驱动的方式还是Windows Shell 扩展编程的方式好一些呢?这两个有什么区别呢?因为我不太确定这两个技术到底哪个比较合适而且风险较小。
[/Quote]
windows shell应该完成不了你上面的那些要求。
tengerye 2012-07-26
  • 打赏
  • 举报
回复
跪求大神啊,怎么都想不通。怎么修改文件名,只能获得修改修改之前的旧的文件名,却获得不了新的文件名呢?
赵4老师 2012-07-26
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 的回复:]
FILE_ACTION_RENAMED_OLD_NAME 消息当前得到的FILE_NOTIFY_INFORMATION 地址加上他的成员 NextEntryOffset得到下一个记录,这个记录好像是FILE_ACTION_RENAMED_NEW_NAME 你在获取它的
FILE_NOTIFY_INFORMATION 从中获取新的文件名
[/Quote]
真理往往掌握在少数人手中!
tengerye 2012-07-26
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 的回复:]
FILE_ACTION_RENAMED_OLD_NAME 消息当前得到的FILE_NOTIFY_INFORMATION 地址加上他的成员 NextEntryOffset得到下一个记录,这个记录好像是FILE_ACTION_RENAMED_NEW_NAME 你在获取它的
FILE_NOTIFY_INFORMATION 从中获取新的文件名
[/Quote]
大神果然厉害,问题解决了。
谢谢大家,虽然程序监控文件夹的模块写好了,还没有以服务的方式存在,但是我已经知道如何写了。
感谢大家对我一直的关心。参与的朋友我都回尽量给分,但是特别要感谢:Saimen(思路),fangchao918628(解决了重大疑惑)。
tengerye 2012-07-25
  • 打赏
  • 举报
回复
恳请各路大神指导一下:我删除文件收到了FILE_ACTION_REMOVED消息,修改文件也收到了FILE_ACTION_RENAMED_OLD_NAME消息可是却收不到FILE_ACTION_RENAMED_NEW_NAME这个消息。按道理说应该是FILE_ACTION_RENAMED_OLD_NAME和FILE_ACTION_RENAMED_NEW_NAME两个消息同时收到的才对。
可是我为什么只收到了文件名修改之前的文件名的消息呢?
修改之后的文件名的消息却收不到呢?
gmyhbio 2012-07-25
  • 打赏
  • 举报
回复
底层可以满足你的要求吧- -
hook各个相关操作的api即可。
tengerye 2012-07-25
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 的回复:]
简单点可以直接用api实现,楼主查:
ReadDirectoryChangesW
还有:
FindFirstChangeNotification

如果要复杂的就是文件过滤驱动了
[/Quote]
现在我就是使用ReadDirectoryChangesW方式,我获取文件修改的信息是通过FILE_NOTIFY_INFORMATION结构体。而这个结构体Action的成员是记录到底是哪种类型的修改,但是我修改文件名的时FILE_ACTION_RENAMED_NEW_NAME的消息却接受不到,所以请各路大神指明一条解决方案?
jwybobo2007 2012-07-25
  • 打赏
  • 举报
回复
简单点可以直接用api实现,楼主查:
ReadDirectoryChangesW
还有:
FindFirstChangeNotification

如果要复杂的就是文件过滤驱动了
x2213664607 2012-07-25
  • 打赏
  • 举报
回复
太深奥了.....
tengerye 2012-07-25
  • 打赏
  • 举报
回复
恳请各路大神指导一下:我删除文件收到了FILE_ACTION_REMOVED消息,修改文件也收到了FILE_ACTION_RENAMED_OLD_NAME消息可是却收不到FILE_ACTION_RENAMED_NEW_NAME这个消息。按道理说应该是FILE_ACTION_RENAMED_OLD_NAME和FILE_ACTION_RENAMED_NEW_NAME两个消息同时收到的才对。
可是我为什么只收到了文件名修改之前的文件名的消息呢?
修改之后的文件名的消息却收不到呢?
tengerye 2012-07-24
  • 打赏
  • 举报
回复
感谢Saimen提供的方法,现在出现了一个小问题:
FILE_ACTION_RENAMED_NEW_NAME消息收不到,引用MSDN的话:
The file was renamed, and this is the new name. If the old name resides within the directory being monitored, the client will also receive the FILE_ACTION_RENAME_OLD_NAME. If the old name resides outside of the directory being monitored, the client will not receive the FILE_ACTION_RENAME_OLD_NAME.
我对于“文件名驻留在目录下”不是很清楚,请大神解释一下?
tengerye 2012-07-24
  • 打赏
  • 举报
回复
谢谢,赵老师。我现在是这个问题,在监控目录下进行更名操作。FILE_ACTION_RENAME_OLD_NAME消息收到了,FILE_ACTION_RENAMED_NEW_NAME消息却收不到。
我觉得MSDN的话有很大的问题,因为只是文件更名操作的话,那肯定都是在同一个监视目录下的。怎么会出现旧的名字接收到新名字接收不到,或者是新名字接收不到而旧的名字却接收的到的情况呢?
跪求赵老师和其他大神们解答?
赵4老师 2012-07-24
  • 打赏
  • 举报
回复
The file was renamed, and this is the new name. If the old name resides within the directory being monitored, the client will also receive the FILE_ACTION_RENAME_OLD_NAME. If the old name resides outside of the directory being monitored, the client will not receive the FILE_ACTION_RENAME_OLD_NAME.
文件刚被更名, 这是新名字。如果旧名字在被监视的目录中,客户端会同时收到FILE_ACTION_RENAME_OLD_NAME。如果旧名字不在被监视的目录中,客户端不会收到FILE_ACTION_RENAME_OLD_NAME。
tengerye 2012-07-19
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 的回复:]
shell的方式确实容易,但楼主的第三个条件(以service方式运行)一票否决了这种方式,因为服务程序没有桌面,也没有SHELL。
[/Quote]
谢谢提醒,还好之前没有用shell扩展编程的方式,现在使用的方式是windows api.不知道大神们能不能推荐一些权威详细的windows service编程的资料什么的,小弟谢过大家了。
redui 2012-07-19
  • 打赏
  • 举报
回复
shell的方式确实容易,但楼主的第三个条件(以service方式运行)一票否决了这种方式,因为服务程序没有桌面,也没有SHELL。
yyyyy_3 2012-07-19
  • 打赏
  • 举报
回复
用驱动做吧.
用钩子也可以.
淡定的飘着 2012-07-19
  • 打赏
  • 举报
回复
这也不叫抄袭,看下他的思路不好吗。
加载更多回复(19)
Apache Subversion 通常被缩写成 SVN,是一个开放源代码的版本控制系统,Subversion 在 2000 年由 CollabNet Inc 开发,现在发展成为 Apache 软件基金会的一个项目,同样是一个丰富的开发者和用户社区的一部分。SVN相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。互联网上免费的版本控制服务多基于Subversion。 SVN 的主要功能(1)目录版本控制CVS 只能跟踪单个文件的历史, 不过 Subversion 实作了一个 虚拟 的版本控管文件系统, 能够依时间跟踪整个目录的变动。 目录和文件都能进行版本控制。(2)真实的版本历史自从CVS限制了文件的版本记录,CVS并不支持那些可能发生在文件上,但会影响所在目录内容的操作,如同复制和重命名。除此之外,在CVS里你不能用拥有同样名字但是没有继承老版本历史或者根本没有关系的文件替换一个已经纳入系统的文件。在Subversion中,你可以增加(add)、删除(delete)、复制(copy)和重命名(rename),无论是文件还是目录。所有的新加的文件都从一个新的、干净的版本开始。(3)自动提交一个提交动作,不是全部更新到了档案库中,就是不完全更新。这允许开发人员以逻辑区间建立并提交变动,以防止当部分提交成功时出现的问题。(4)纳入版本控管的元数据每一个文件与目录都附有一組属性关键字并和属性值相关联。你可以创建, 并儲存任何你想要的Key/Value对。 属性是随着时间来作版本控管的,就像文件內容一样。(5)选择不同的网络层Subversion 有抽象的档案库存取概念, 可以让人很容易地实作新的网络机制。 Subversion 可以作为一个扩展模块嵌入到Apache HTTP 服务器中。这个为Subversion提供了非常先进的稳定性和协同工作能力,除此之外还提供了许多重要功能: 举例来说, 有身份认证, 授权, 在线压缩, 以及文件库浏览等等。还有一个轻量级的独立Subversion服务器, 使用的是自定义的通信协议, 可以很容易地通过 ssh 以 tunnel 方式使用。(6)一致的数据处理方式Subversion 使用二进制差异算法来异表示文件的差异, 它对文字(人类可理解的)与二进制文件(人类无法理解的) 两类的文件都一视同仁。 这两类的文件都同样地以压缩形式储存在档案库中, 而且文件差异是以两个方向在网络上传输的。(7)有效的分支(branch)与标签(tag)在分支与标签上的消耗并不必一定要与项目大小成正比。 Subversion 建立分支与标签的方法, 就只是复制该项目, 使用的方法就类似于硬连接(hard-link)。 所以这些操作只会花费很小, 而且是固定的时间。(8)HackabilitySubversion没有任何的历史包袱; 它主要是一群共用的 C 程序库, 具有定义完善的API。这使得 Subversion 便于维护, 并且可被其它应用程序与程序语言使用。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧