基于IO完成端口实现的封装类class P2PFileShare:
#if !defined(AFX_P2PFILESHARE_H__5CFE59EF_7A09_4715_885F_FED4E2992470__INCLUDED_)
#define AFX_P2PFILESHARE_H__5CFE59EF_7A09_4715_885F_FED4E2992470__INCLUDED_
#include "stdafx.h"
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define _WIN32_IE 0x0501
#define _WIN32_DCOM
class P2PFileShare
typedef struct
OVERLAPPED ov;
BYTE buff[65536];
LPTSTR path;
DWORD flag;
HANDLE handle;
}PATH_OV, *LPPATH_OV;
public :
P2PFileShare()
:mh_IOCP(NULL)
,mn_OVPtr(0)
,mp_OVPtr(NULL)
::InitializeCriticalSection(&m_cs);
virtual~P2PFileShare()
Close(TRUE);
::DeleteCriticalSection(&m_cs);
private:
HRESULT _CreateWorkerThread(); // 创建工作线程
#ifndef _WIN32_WCE
static UINT WI
同步方式处理的话如果多个文件有可能有处理不到的文件。采用异步方式可以解决这个问题。基于IO完成端口实现的封装类class P2PFileShare:#if !defined(AFX_P2PFILESHARE_H__5CFE59EF_7A09_4715_885F_FED4E2992470__INCLUDED_)#define AFX_P2PFILESHARE_H__5CFE59EF...
最近在做一个项目,其
中
涉及到
监控
指定
目录
下所有
文件
和子
目录
内的修改信息。经过一番努力,总算实现这一功能,在此特别感谢那些帮助过我的朋友和同事们。今天整理一下这几天的收获,列出相关的知识点,供后来者参考。
1.FindFirst
Change
Notificat
io
n()函数:
功能:创建一个改变通知句柄,并设置通知条件,即发生某种修改时,该通知句柄将被促发生效。该函数仅仅负责对
文件
修改作出
在我没有了解
Read
Direcotry
Change
sW
这个
目录
监控
函数之前,一直认为要想实现计算机上的
文件
监控
,能够
监控
计算机上每个
文件
的改动,是一件极其困难的事情,曾经自己也细想过,但都没有什么好的思绪。不过,事实上,
文件
监控
的确是一件比较复杂的事情。好在Windows为我们提供了一个功能强大,但是使用较为方便的函数接口,这边是我们这篇文章要讲解的
Read
Direcotry
Change
sW
函数。
// 检索描述指定
目录
中
更改的信息,但不会报告对指定
目录
本身的更改。
// 如果函数成
Windows提供了API对
文件
和
目录
进行
监控
,分别是:FindFirst
Change
Notificat
io
n和
Read
Directory
Change
sW
。
FindFirst
Change
Notificat
io
n函数,可以
监控
到目标
目录
及其子
目录
中
下有
文件
发生改变,但不能
监控
到具体是哪一个
文件
发生改变。
Read
Directory
Change
sW
能
监控
到目标
目录
下某一
文件
发生改变,并
理解
Read
Directory
Change
sW
原作者:Jim Beveridge 原文:http://qualapps.blogspot.com/2010/05/understanding-
read
directory
change
sw
.html?amp
渣翻译:bbca
在使用
Read
Directory
Change
s的时候发现了一个问题,在向
监控
的
文件
夹添加了大量的
文件
时,出现了
文件
漏检的问题。我使用的是从网上找到的教程,起初也不是很清楚,认为是程序没能响应大量的操作。后来发现问题出在
文件
名的获取上。
下面是我的核心代码部分:
m_FileCnt=0;
HANDLE dirHandle = CreateFile(
GENERIC_
READ
| ...
最近在做云盘,本来的同步
方式
效率比较低,所以我就想着做个
文件
夹监视,
监控
同步的
文件
夹。所以用到的
Read
Directory
Change
sW
这个api,虽然网上关于这个api的介绍有不少但是有些细节介绍的还是比较少的所以留下这篇文章给大家一个参考,也给自己留个备份。
首先贴下我的代码:
void CFolderMonitor::DoMonitor()
char *buffer
read
directory
change
sw
是Windows操作系统
中
的一个函数,用于监视指定
目录
中
的
文件
和子
目录
的更改情况。当一个或多个
目录
中
的
文件
或子
目录
被创建、重命名、删除或修改时,函数会发送通知给调用程序。
该函数需要使用Win32 API来调用,并且需要提供要监视的
目录
路径和要监视的更改类型。一旦开始监视,函数将阻塞调用线程,直到监视过程结束或发生错误。因此,通常需要将其放在单独的线程
中
运行,以避免阻塞应用程序的主线程。
需要注意的是,
read
directory
change
sw
函数在使用时需要小心处理重复的通知和事件顺序,否则可能会导致应用程序出现问题。同时,使用该函数可能会对系统性能造成影响,因此应谨慎使用。