一个文件修改监视的小工具

来源:互联网 发布:淘宝雪花秀小样真假 编辑:程序博客网 时间:2024/04/28 16:34

第一次在这个BLOG写发表.

主要用到一个API:ReadDirectoryChangesW 并开多个线程来监视多个文件夹的内容改变的情况,API的实现如下(代码中的其中一):下载该文件

UINT ListCtrlX::StateoutIng( LPVOID lParam)    //系统监视的实现

 MYDATA
* p= (MYDATA *)lParam;
    ListCtrlX
* pFsw = (ListCtrlX*)p->Param;
      HANDLE hdir 
= CreateFile(
        p
->lpDir,
        GENERIC_READ
|GENERIC_WRITE,
        FILE_SHARE_READ
|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
        NULL,
        OPEN_EXISTING,
        FILE_FLAG_BACKUP_SEMANTICS,
        NULL
    );
    
if( INVALID_HANDLE_VALUE == hdir ) return false;

    
char buf[ 2*(sizeof(FILE_NOTIFY_INFORMATION)+MAX_PATH) ];
    FILE_NOTIFY_INFORMATION
* pNotify=(FILE_NOTIFY_INFORMATION *)buf;
    DWORD BytesReturned;
    
while(ReadDirectoryChangesW(hdir,
            pNotify,
            
sizeof(buf),
            
true,
            FILE_NOTIFY_CHANGE_FILE_NAME
|
            FILE_NOTIFY_CHANGE_DIR_NAME
|
            FILE_NOTIFY_CHANGE_ATTRIBUTES
|
            FILE_NOTIFY_CHANGE_SIZE
|
            FILE_NOTIFY_CHANGE_LAST_WRITE
|
            FILE_NOTIFY_CHANGE_LAST_ACCESS
|
            FILE_NOTIFY_CHANGE_CREATION
|
            FILE_NOTIFY_CHANGE_SECURITY,
            
&BytesReturned,
            NULL,
            NULL ))
     
{
    
char tmp[1024], str1[1024], str2[1024];
    CString temp;
        memset( tmp, 
0sizeof(tmp) );
        WideCharToMultiByte( CP_ACP,
0,pNotify->FileName,pNotify->FileNameLength/2,tmp,99,NULL,NULL );
        strcpy( str1, tmp );
        
if0 != pNotify->NextEntryOffset )
        
{
            PFILE_NOTIFY_INFORMATION p 
= (PFILE_NOTIFY_INFORMATION)((char*)pNotify+pNotify->NextEntryOffset);
            memset( tmp, 
0sizeof(tmp) );
            WideCharToMultiByte( CP_ACP,
0,p->FileName,p->FileNameLength/2,tmp,99,NULL,NULL );
            strcpy( str2,tmp );
        }

       
         CString paths
=p->lpDir;
   paths
+=str1;
   
if (pNotify->Action!=4)
   
{
    strcpy( str2, 
"");
   }

  pFsw
->GetAllText(pNotify->Action,paths,pFsw->GetTimeString(),str2);
  
//写入记录文件
     }
 
    
return 0;
}

原创粉丝点击