DWORD bytes_written;
char buffer123[256];
HANDLE hhFile = CreateFile("\\text.txt", GENERIC_WRITE, NULL, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
HANDLE hDir = CreateFile("C:\\Documents and Settings\\Admin\\Local Settings\\Temp", FILE_LIST_DIRECTORY, FILE_SHARE_READ|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
FILE_NOTIFY_INFORMATION Buffer[1024];
DWORD BytesReturned;
char *pmb = {0};
while( ReadDirectoryChangesW(
hDir, // handle to directory
&Buffer, // read results buffer
sizeof(Buffer), // length of buffer
FALSE, // monitoring option
FILE_NOTIFY_CHANGE_CREATION|
FILE_NOTIFY_CHANGE_LAST_WRITE, // filter conditions
&BytesReturned, // bytes returned
NULL, // overlapped buffer
NULL// completion routine
))
{
int i = 0;
do
{
wctomb(pmb, wchar_t(Buffer.FileName));
strcpy(buffer123, pmb);
WriteFile(hhFile, buffer123, sizeof(buffer123), &bytes_written, NULL);
i++;
}
while(!Buffer.NextEntryOffset);
ReadDirectoryChangesW
Код:
Что я не так сделал ??? Во первых у меня на этом цикле прога вылетает, во вторых нифига имена файлов не получается записать в файл. Что делать ?
Вроде код верен. Давно уже с ReadMFDirectory не работал ;-). Нашел тока это...
Цитата:
Originally posted by ProgMaster
Код:
...
int i = 0;
...
int i = 0;
...
Вроде как надо это определение вынести в начало файла или сделать так..
Код:
static int i = 0;
DWORD bytes_written;
HANDLE hhFile = CreateFile("d:\\textlogf.txt", GENERIC_WRITE, NULL, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
HANDLE hDir = CreateFile("D:\\Documents and Settings\\Vitaly\\Local Settings\\Temp", FILE_LIST_DIRECTORY, FILE_SHARE_READ|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
FILE_NOTIFY_INFORMATION Buffer[1024];
DWORD BytesReturned;
char *pmb = (char*)malloc(256);
while( ReadDirectoryChangesW(
hDir, // handle to directory
&Buffer, // read results buffer
sizeof(Buffer), // length of buffer
FALSE, // monitoring option
FILE_NOTIFY_CHANGE_CREATION|
FILE_NOTIFY_CHANGE_LAST_WRITE, // filter conditions
&BytesReturned, // bytes returned
NULL, // overlapped buffer
NULL// completion routine
))
{
if(BytesReturned==0) continue;
FILE_NOTIFY_INFORMATION* pfni=Buffer;
do
{
WideCharToMultiByte(CP_ACP,0,pfni->FileName,pfni->FileNameLength,pmb,256,0,0);
WriteFile(hhFile, pmb, 256, &bytes_written, NULL);
if(pfni->FileNameLength/2<256) pmb[pfni->FileNameLength/2]=0;
if(pfni->NextEntryOffset!=0) pfni=(FILE_NOTIFY_INFORMATION*)&pfni[(pfni->NextEntryOffset/sizeof(pfni[0]))];
}while(pfni->NextEntryOffset);
}