• 目录监控


    界面如下:

    关键代码如下:

     1     BOOL bRet = FALSE;
     2     BYTE Buffer[1024] = {0};
     3 
     4     CDirectoryWatchDlg *pDlg = (CDirectoryWatchDlg *)lpParam;
     5     FILE_NOTIFY_INFORMATION *pBuffer = (FILE_NOTIFY_INFORMATION*)Buffer;
     6     DWORD dwBytesReturned  = 0;
     7     HANDLE hFile = CreateFile(pDlg->m_strDirectoryPath.GetBuffer(0), FILE_LIST_DIRECTORY, FILE_SHARE_READ
     8         | FILE_SHARE_DELETE | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
     9     if(INVALID_HANDLE_VALUE == hFile)
    10     {
    11         DWORD dwErr = GetLastError();
    12         CString strErr;
    13         strErr.Format(_T("CreateFile Error : %d"), dwErr);
    14         AfxMessageBox(strErr);
    15         return 1;
    16     }
    17 
    18     if (pDlg->GetDlgItem(IDC_BUTTON_START) != NULL)
    19     {
    20         pDlg->GetDlgItem(IDC_BUTTON_START)->EnableWindow(FALSE);
    21     }
    22     if (pDlg->GetDlgItem(IDC_BUTTON_STOP) != NULL)
    23     {
    24         pDlg->GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(TRUE);
    25     }
    26 
    27     CString strInfo;
    28     CString strType;
    29     CString strIndex;
    30 
    31     while (TRUE)
    32     {
    33         ZeroMemory(Buffer, 1024);
    34         bRet = ReadDirectoryChangesW(hFile, &Buffer, sizeof(Buffer), TRUE, FILE_NOTIFY_CHANGE_FILE_NAME |
    35             FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_LAST_WRITE, &dwBytesReturned, NULL, NULL);
    36         if (bRet == TRUE)
    37         {
    38             switch (pBuffer->Action)
    39             {
    40             case FILE_ACTION_ADDED:
    41                 strType = _T("添加");
    42                 strInfo = _T("添加文件:");
    43                 strInfo += pBuffer->FileName;
    44                 break;
    45             case FILE_ACTION_REMOVED:
    46                 strType = _T("删除");
    47                 strInfo = _T("删除文件:");
    48                 strInfo += pBuffer->FileName;
    49                 break;
    50             case FILE_ACTION_MODIFIED:
    51                 strType = _T("修改");
    52                 strInfo = _T("修改文件:");
    53                 strInfo += pBuffer->FileName;
    54                 break;
    55             case FILE_ACTION_RENAMED_OLD_NAME:
    56                 strType = _T("重命名");
    57                 strInfo = _T("将文件");
    58                 strInfo += pBuffer->FileName;
    59                 if (pBuffer->NextEntryOffset != 0)
    60                 {
    61                     FILE_NOTIFY_INFORMATION *TempBuffer = (FILE_NOTIFY_INFORMATION*)((DWORD)pBuffer + pBuffer->NextEntryOffset);
    62                     switch (TempBuffer->Action)
    63                     {
    64                     case FILE_ACTION_RENAMED_NEW_NAME:
    65                         strInfo += _T("重命名为");
    66                         strInfo += TempBuffer->FileName;
    67                         break;
    68                     }
    69                 }
    70                 break;
    71             case FILE_ACTION_RENAMED_NEW_NAME:
    72                 strType = _T("重命名");
    73                 strInfo = _T("重命名为");
    74                 strInfo += pBuffer->FileName;
    75                 break;
    76             }
    77 
    78             if (pDlg != NULL)
    79             {
    80                 strIndex.Format(_T("%d"), pDlg->nIndex);
    81                 pDlg->m_ctrlDirectoryWatchLog.InsertItem(pDlg->nIndex, strIndex);
    82                 pDlg->m_ctrlDirectoryWatchLog.SetItemText(pDlg->nIndex, 1, strType);
    83                 pDlg->m_ctrlDirectoryWatchLog.SetItemText(pDlg->nIndex++, 2, strInfo);
    84             }
    85         }
    86     }
    87 
    88     CloseHandle(hFile);
    89     return 0;

    下载地址:http://pan.baidu.com/s/1dDBrWM9

  • 相关阅读:
    Mybatis学习记录
    北京信息科技大学第十一届程序设计竞赛E-- kotori和素因子(深搜)
    eclipse快捷键记录
    牛客小白月赛15A 斑羚飞渡
    台州学院第十二届校赛记录(B,C,E,H,I,J,L)
    3.13 模拟赛
    bzoj 4827 礼物
    bzoj 3252 攻略
    bzoj 5457 城市
    bzoj 3681 Arietta
  • 原文地址:https://www.cnblogs.com/qiyueliuguang/p/3579455.html
Copyright © 2020-2023  润新知