Есть ли способ на каком-либо языке перехватить мою программу, когда пользователь переименовывает файл?
Например: Пользователь переименовывает файл и нажимает клавишу ВВОД (или щелкает мышью), чтобы подтвердить действие переименования. ПЕРЕД тем, как файл фактически переименован, моя программа «прослушивает» это событие и выдает сообщение: «Вы уверены, что хотите переименовать C: \ test \ file.txt в C: \ test \ test.txt?».
Я думаю / надеюсь, что это возможно с C++, C# или .NET .. Но я понятия не имею, где искать.





Я предполагаю, что это нет возможно, я нашел это, который предназначен для операций мониторинга (включая переименование) в папке, но похоже, что нет аналогичного метода для файлов.
@Richard, FileSystemWatcher хорош, если вам нужно только отслеживать изменения, но ему нужно их прерывать, чего он не может.
Вероятно, вы можете решить эту проблему, используя FileSystemWatcher класс в .NET framework.
Из замечаний класса:
You can watch for renaming, deletion, or creation of files or directories. For example, to watch for renaming of text files, set the Filter property to "*.txt" and call the WaitForChanged method with a Renamed specified for its parameter.
IFileOperationProgressSink.PreRenameItem - самая близкая поддерживаемая вещь, о которой я знаю. К сожалению, это не ловушка для проводника, поэтому вы можете использовать его только для собственных действий с IFileOperation. В зависимости от ваших потребностей, вы можете написать расширение оболочки, чтобы сделать свой собственный ConfirmRename (или что-то в этом роде) и перейти оттуда.
В противном случае, я думаю, вы смотрите на подключение SHFileOperation. Это должно быть сделано в неуправляемом коде, так как вы будете загружены в Explorer.exe. Для Vista это было изменено на IFileOperation - что, вероятно, означает, что вам придется перехватить его создание и раздать свой макет.
Лично я думаю, что, поскольку вы говорите о переименовании, идея Вильгельмтеля подтверждения изменения после и его отмены, если это необходимо, - лучшая идея.