`
piperzero
  • 浏览: 3555285 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

[C++]监控特定文件夹的事件:三种解决方法汇总

阅读更多
<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog01.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>

监控特定文件夹的事件:三种解决方法汇总<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

LDBIVR程序中要监视特定文件夹的文件落地或者删除事件,本来要用SHELL中的事件通知机制,后来因为要考虑到各种意外事件,如服务意外退出、服务器崩溃等,遂作罢。

对于目录事件异步通知,大致有三个方法:

调用Windowsapi函数ReadDirectoryChanges监视指定目录中文件(推荐使用),这个使用异步IO

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/readdirectorychangesw.asp

The ReadDirectoryChangesW function retrieves information that describes the changes within a directory.

To track changes on a volume, see change journals.

BOOL ReadDirectoryChangesW(

HANDLE hDirectory,

LPVOID lpBuffer,

DWORD nBufferLength,

BOOL bWatchSubtree,

DWORD dwNotifyFilter,

LPDWORD lpBytesReturned,

LPOVERLAPPED lpOverlapped,

LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine

);

或者用SHChangeNotifyRegisterSHChangeNotifyDeregister来注册事件SHChangeNotify

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shchangenotify.asp

SHChangeNotify Function


Notifies the system of an event that an application has performed. An application should use this function if it performs an action that may affect the Shell.

Syntax

voidSHChangeNotify(
LONGwEventId,

UINTuFlags,

LPCVOIDdwItem1,

LPCVOIDdwItem2

);

这个SHELL事件,有人这么介绍(http://qk.5nx.com/article_view.asp?id=11)。

或者调用API函数-FindFirstChangeNotification FindCloseChangeNotificationFindNextChangeNotification WaitForSingleObject

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/findfirstchangenotification.asp

FindFirstChangeNotification

The FindFirstChangeNotification function creates a change notification handle and sets up initial change notification filter conditions. A wait on a notification handle succeeds when a change matching the filter conditions occurs in the specified directory or subtree. However, the function does not indicate the change that satisfied the wait condition.

To retrieve information about the specific change as part of the notification, use the ReadDirectoryChangesW function.

HANDLE FindFirstChangeNotification(

LPCTSTR lpPathName,

BOOL bWatchSubtree,

DWORD dwNotifyFilter

);


著名的FileMon工具用的是虚拟驱动。

相关资源:

1:《监视程序的编制》;

2:《Win32中的目录监控》;

3:《change journals》;

4:《CDirectoryChangeWatcher - ReadDirectoryChangesW all wrapped up》;

5:《监测目录活动》;

6:《请问如何监视系统对文件的访问?》。


Disclaimers

Programmer’s Blog List

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 0.75pt; HEIGHT: 0.75pt" alt="" type="#_x0000_t75"></shape>

博客堂

博客园

Don Box's Blog

Eric.Weblog()

Blogs@asp.net

本文档仅供参考。本文档所包含的信息代表了在发布之日,zhengyun_ustc对所讨论问题的当前看法,zhengyun_ustc不保证所给信息在发布之日以后的准确性。

用户应清楚本文档的准确性及其使用可能带来的全部风险。可以复制和传播本文档,但须遵守以下条款:

  1. 复制时不得修改原文,复制内容须包含所有页

  2. 所有副本均须含有 zhengyun_ustc的版权声明以及所提供的其它声明

  3. 不得以赢利为目的对本文档进行传播



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=260178


分享到:
评论

相关推荐

    监控文件夹内的文件变化

    本文将详细讲解如何实现"监控文件夹内的文件变化"这一功能,我们将围绕标题和描述展开讨论,并结合提供的"Folder Notify"这一文件名,推测可能是一个用于文件夹监控的示例或工具。 首先,我们要理解什么是文件变化...

    vs2010 c++ 文件夹文件监控系统软件

    在本文中,我们将深入探讨如何使用C++编程语言在Visual Studio 2010环境下创建一个文件夹文件监控系统。这个系统能够实时检测并记录指定目录下的文件和文件夹的变动,包括添加、删除和修改操作。我们首先会介绍相关...

    C++创建自定义名称的文件夹

    C++创建自定义名称的文件夹 C++创建自定义名称的文件夹 C++创建自定义名称的文件夹 C++创建自定义名称的文件夹 C++创建自定义名称的文件夹 C++创建自定义名称的文件夹 C++创建自定义名称的文件夹 C++创建自定义名称...

    c++遍历文件夹及其子文件夹所有文件 并输出文件路径和文件内容

    在C++编程中,遍历文件夹及其子文件夹并输出所有文件的路径与内容是一项常见的任务,尤其在处理大量数据或进行文件管理时。这个程序的实现涉及到对操作系统文件系统的接口调用以及文件操作。以下是一份详细的步骤和...

    C++ 删除某文件夹路径下当前系统时间前/后某天的文件

    在C++编程中,删除特定时间范围内的文件是一项常见的任务,尤其在日志管理、数据清理等场景下。本项目专注于删除指定文件夹路径下,当前系统时间之前第三天或之后任意天数的文件。通过修改配置文本,可以灵活设置...

    基于C++开发的文件夹自动备份工具源码

    基于C++开发的文件夹自动备份工具源码提供了一种自定义且高效的方式来实现这一功能。C++是一种强大的编程语言,以其性能、灵活性和面向对象的特性而闻名,使得它成为构建这种复杂系统理想的选项。 首先,我们要理解...

    QFileSystemWatcher 监控文件夹下的文件和文件夹的变化

    注:如果因为目录变更(删除、更改等)引起的该目录内的子文件和子文 件夹的变更(删除改变等)时,操作系统只提供该目录内一级目录下的 文件、文件夹变更的上报信息,若文件夹中包含多级子文件夹以及子文件信息, ...

    C++从一个文件夹中读出所有txt文件的方法示例

    前段时间做项目需要读取一个文件夹里面所有的txt文件,查询资料后得到以下实现方法: 首先了解一下这个结构体 struct _finddata_t { unsigned attrib; time_t time_create; time_t time_access; time_t time_...

    vs2017 下 windows C/C++ 删除文件夹以及文件夹里的所有文件,遍历嵌套删除文件及文件夹

    在Windows环境下,使用C或C++编程语言进行文件和文件夹操作是一项常见的任务。Visual Studio 2017(VS2017)为开发者提供了丰富的库和工具来支持这样的功能。本文将深入探讨如何在VS2017中编写代码来删除文件夹及其...

    C++遍历指定文件夹中的所有文件

    ### C++遍历指定文件夹中的所有文件 在C++编程语言中,有时我们需要实现对文件系统的操作,比如遍历指定文件夹中的所有文件。这种功能对于开发文件管理器、备份软件等应用非常实用。本文将详细介绍如何使用C++来...

    Visual C++文件与文件夹系统操作

    综上所述,Visual C++提供了一整套丰富的工具和方法来处理文件和文件夹的系统操作。学习和掌握这些技术对于任何Windows平台的开发者来说都是至关重要的。通过实践和分析源代码,你可以更好地理解这些操作的工作原理...

    Visual C++ 文件与文件夹属性操作

    在Visual C++中,可以通过`GetFileAttributes`函数获取文件或文件夹的属性,该函数返回一个`DWORD`类型的值,每个位代表一个特定的属性。例如,0x00000001表示只读,0x00000002表示隐藏,0x00000004表示系统,0x...

    (VS2010 C++)删除指定目录及其下所有的文件夹,文件

    在C++编程中,删除指定目录及其所有子文件夹和文件是一项常见的操作,尤其是在系统清理、软件卸载或数据管理的场景中。本示例基于Visual Studio 2010 (VS2010)环境,使用C++语言实现这一功能。我们将探讨如何通过...

    C++删除指定文件夹下N天及之前日志文件的方法

    本篇文章将深入探讨如何使用C++实现一个功能,即删除指定文件夹下N天及之前的日志文件。这个功能涉及到文件系统操作、时间处理和条件判断等多个方面。 首先,我们关注的是文件操作。在C++中,可以使用Windows API...

    c++文件,文件夹操作简单包装类代码

    在C++编程中,对文件和文件夹的操作是常见的任务,尤其在开发涉及文件系统交互的应用程序时。本文将深入探讨一个在Visual Studio 2005环境下测试通过的C++简单包装类,用于实现文件和文件夹的操作。这个类为开发者...

    C++访问判断文件夹是否存在并访问文件夹以及文件

    C++访问判断文件夹是否存在并访问文件夹以及文件, C++访问判断文件夹是否存在并访问文件夹以及文件

    监听文件夹内的文件操作C++代码

    在IT领域,尤其是在系统监控和自动化任务中,有时我们需要跟踪文件或文件夹的变化,以便在特定文件被创建、修改或删除时执行相应的操作。本文将详细介绍如何使用C++来监听文件夹内的文件操作,虽然标题提到的是C++,...

    文件夹压缩C++程序

    本项目"文件夹压缩C++程序"是利用C++编程语言实现的一个工具,它集成了两种不同的编码算法:算术编码和LZSS编码,以实现高效的数据压缩和解压缩功能。 1. **算术编码**: 算术编码是一种熵编码方法,主要用于无损...

    C++中探出打开文件夹对话框并获取文件夹路径

    C++中探出打开文件夹对话框并获取文件夹路径,在对选择文件的程序中特别常用

    删除文件夹函数C++代码(有demo)

    在C++编程中,删除文件或文件夹是一个常见的任务,特别是在清理临时文件、卸载程序或者执行系统维护操作时。本篇文章将详细讲解如何在C++中实现删除文件夹的功能,并提供一个基于VS2008的示例(Demo)。 首先,我们...

Global site tag (gtag.js) - Google Analytics