写了个监视文件夹增删的程序,问题是当删除一个含有文件的文件夹时无法显示其具体删除的文件,
只是显示删除了该文件夹,如何做到删除该文件夹时同时显示被删除的包含在该文件夹里的文件名?
#include"stdafx.h"
#include"windows.h"
#include"strsafe.h"
#include<iostream>
DWORD CALLBACK Proc(PVOID pvoid)
{
TCHAR *str1 = (TCHAR *)pvoid;
TCHAR str2[256] = { 0 };
StringCchCopy(str2, 256, str1);
DWORD dwreturn = 0;
PFILE_NOTIFY_INFORMATION pfni;
HANDLE hfile = CreateFile(str2, FILE_LIST_DIRECTORY, FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_ALWAYS, FILE_FLAG_BACKUP_SEMANTICS, 0);
if (hfile != INVALID_HANDLE_VALUE)
{
while(true)
{
ZeroMemory(str2, sizeof(str2));
ReadDirectoryChangesW(hfile, str2, sizeof(str2), TRUE, FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_FILE_NAME, &dwreturn, 0, 0);
pfni = (PFILE_NOTIFY_INFORMATION)str2;
TCHAR str3[256] = { 0 };
StringCchCopy(str3, 256, str1);
StringCchCat(str3, 256, pfni->FileName);
switch(pfni->Action)
{
case 1:
std::wcout << L"新增文件:"<<str3 << std::endl;//新增时的提示
break;
case 2:
std::wcout << L"删除文件:" << str3 << std::endl;//删除时的提示
break;
}
}
CloseHandle(hfile);
}
else
{
std::wcout << L"打开文件夹有误" << std::endl;
}
return 0;
}
int main()
{
TCHAR str[256] = L"d:\\ab\\";//要监视的文件夹
std::wcout.imbue(std::locale(""));
std::wcout << L"随意输入字符,回车退出" << std::endl;
HANDLE hthread = CreateThread(0, 0, Proc, str, 0, 0);
CloseHandle(hthread);
char ch = getchar();
std::wcout << L"bye!";
return 0;
}
只是显示删除了该文件夹,如何做到删除该文件夹时同时显示被删除的包含在该文件夹里的文件名?
#include"stdafx.h"
#include"windows.h"
#include"strsafe.h"
#include<iostream>
DWORD CALLBACK Proc(PVOID pvoid)
{
TCHAR *str1 = (TCHAR *)pvoid;
TCHAR str2[256] = { 0 };
StringCchCopy(str2, 256, str1);
DWORD dwreturn = 0;
PFILE_NOTIFY_INFORMATION pfni;
HANDLE hfile = CreateFile(str2, FILE_LIST_DIRECTORY, FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_ALWAYS, FILE_FLAG_BACKUP_SEMANTICS, 0);
if (hfile != INVALID_HANDLE_VALUE)
{
while(true)
{
ZeroMemory(str2, sizeof(str2));
ReadDirectoryChangesW(hfile, str2, sizeof(str2), TRUE, FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_FILE_NAME, &dwreturn, 0, 0);
pfni = (PFILE_NOTIFY_INFORMATION)str2;
TCHAR str3[256] = { 0 };
StringCchCopy(str3, 256, str1);
StringCchCat(str3, 256, pfni->FileName);
switch(pfni->Action)
{
case 1:
std::wcout << L"新增文件:"<<str3 << std::endl;//新增时的提示
break;
case 2:
std::wcout << L"删除文件:" << str3 << std::endl;//删除时的提示
break;
}
}
CloseHandle(hfile);
}
else
{
std::wcout << L"打开文件夹有误" << std::endl;
}
return 0;
}
int main()
{
TCHAR str[256] = L"d:\\ab\\";//要监视的文件夹
std::wcout.imbue(std::locale(""));
std::wcout << L"随意输入字符,回车退出" << std::endl;
HANDLE hthread = CreateThread(0, 0, Proc, str, 0, 0);
CloseHandle(hthread);
char ch = getchar();
std::wcout << L"bye!";
return 0;
}