7

当用户重命名文件时,有什么方法可以用任何语言挂钩我的程序?

例如:用户重命名文件并按下回车键(或单击离开)以确认重命名操作。在文件实际重命名之前,我的程序“侦听”此事件并弹出一条消息“您确定要将 C:\test\file.txt 重命名为 C:\test\test.txt?”。

我在想/希望这可以通过 C++、C# 或 .NET 实现。但我不知道在哪里寻找。

4

3 回答 3

5

您可以通过使用.NET 框架中的FileSystemWatcher 类来解决这个问题。

来自课堂评论:

您可以监视文件或目录的重命名、删除或创建。例如,要监视文本文件的重命名,请将 Filter 属性设置为“*.txt”并调用 WaitForChanged 方法并为其参数指定重命名。

于 2008-08-23T22:31:11.813 回答
0

我的猜测是这是不可能的,我确实发现是用于监视文件夹上的操作(包括重命名),但似乎没有类似的文件方法。

@Richard,如果您只需要监视更改,则 FileSystemWatcher 很好,但他需要中断它们,这是它无法做到的。

于 2008-08-23T22:21:11.713 回答
0

IFileOperationProgressSink.PreRenameItem是我所知道的最受支持的东西。不幸的是,它不是 Explorer 的挂钩 - 所以您只能将它用于您自己的IFileOperation操作。根据您的需要,您可以编写一个 shell 扩展来做自己的ConfirmRename(或其他事情),然后从那里分支。

SHFileOperation否则,我认为您正在寻找钩子。这必须在非托管代码中完成,因为您将被加载到 Explorer.exe。对于 Vista,这已更改为IFileOperation- 这可能意味着您必须挂钩它的创建并传递您的模拟。

就个人而言,我认为既然您正在谈论重命名,wilhelmtell 的想法是在更改确认并在必要时撤消它是最好的主意。

于 2008-08-24T01:37:02.163 回答