检测磁盘文件是否发生变化

来源:互联网 发布:python精通pdf 百度云 编辑:程序博客网 时间:2024/04/23 22:09

由于某种原因需要不断地检查磁盘或磁盘中的某个文件夹及文件夹内的子文件夹和文件是否发生了变化(如创建了新文件、创建了新文件夹,文件或文件夹被删除等),如需要做一个自动上传的客户端程序,往服务器上传文件,则可以使用:FindFirstChangeNotification API函数来决定什么时候可以上传:

HANDLE WINAPI FindFirstChangeNotification(
  __in          LPCTSTR lpPathName,
  __in          BOOL bWatchSubtree,
  __in          DWORD dwNotifyFilter
);
dwNotifyFilter参数标识了待检测的条件,当该条件成立时,FindFirstChangeNotification函数就会返回发生此次改变的通告对象句柄。
下面是使用该函数的一人示例程序,该程序使用一个线程来不断地检测D盘根目录下的文件夹及文件的状态变化。在该线程函数中,WaitForSingleObject函数等待D盘根目录下的文件夹及文件的状态变化。当有变化发生时, hChange将变成有信号状态。

DWORD CMainFrame::DetectDirThreadProc(LPVOID lpParam)

{
while(TRUE)
{

HANDLE hChange=::FindFirstChangeNotification("D:\\",TRUE,FILE_NOTIFY_CHANGE_SIZE/*| FILE_NOTIFY_CHANGE_FILE_NAME|FILE_NOTIFY_CHANGE_DIR_NAME*/);
if (hChange == INVALID_HANDLE_VALUE) 
{
AfxMessageBox("FindFirstChangeNotification() Error!");
return -1;
}
DWORD dwRet=::WaitForSingleObject(hChange,INFINITE);
if(WAIT_OBJECT_0==dwRet)
{
AfxMessageBox("Changing!");
}


}
return 0;

}

当dwNotifyFilter取值FILE_NOTIFY_CHANGE_SIZE,表示检测磁盘是否有文件写入,但创建文件及文件夹、移动文件或文件夹、永久删除文件及文件夹操作时该状态变化不会被标识。

原创粉丝点击