Article View: borland.public.cppbuilder.nativeapi
Article #6842ReadDirectoryChangesW - Access Violation
From: Zoetjuh
Date: Tue, 05 Apr 2005 21:34
Date: Tue, 05 Apr 2005 21:34
87 lines
3704 bytes
3704 bytes
Hello everyone,
I've got a slight problem with reading the FileName after the Overlapped Event
on ReadDirectoryChangesW. With my following code, I'm getting an Access
Violation error; now I'm not sure what buffersize to use, but this one seems to
suffice:
Hoping someone can help me out.
Kind regards,
Peter Elbertse
// Set handles:
HANDLE hDir = CreateFile (fInternalDirectory.c_str(), FILE_LIST_DIRECTORY,
FILE_SHARE_READ|FILE_SHARE_DELETE, NULL, OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, NULL);
// Check if the Dir Handle is OK:
if (hDir != INVALID_HANDLE_VALUE)
{
// Set vars:
FILE_NOTIFY_INFORMATION *ChangesBuffer = new FILE_NOTIFY_INFORMATION();
DWORD BufferLength = 0;
HANDLE myServiceWatch = CreateEvent(NULL, FALSE, FALSE, NULL);
DWORD ChangesMaxBuffer = sizeof(FILE_NOTIFY_INFORMATION) + MAX_PATH;
// Set Overlapped:
OVERLAPPED Overlapped;
ZeroMemory(&Overlapped, sizeof(Overlapped));
Overlapped.hEvent = myServiceWatch;
// Outer try:
try
{
// fetch and process commands until the connection or thread is
terminated
while (!Terminated)
{
// Update Notifier Listener:
ReadDirectoryChangesW( hDir, ChangesBuffer, ChangesMaxBuffer, false,
FILE_NOTIFY_CHANGE_FILE_NAME, &BufferLength, &Overlapped, NULL);
// Wait for a signal and than continue
HANDLE myHanldes[1];
myHanldes[0] = myServiceSignal; /* For Thread Termination */
myHanldes[1] = myServiceWatch;
MsgWaitForMultipleObjects(2, myHanldes, FALSE, INFINITE,
QS_ALLINPUT);
if (!Terminated)
{
// Init variables:
DWORD cbOffset = 0;
DWORD OverlappedLength = 0;
String ChangedFile = "";
// Get Overlapped result:
if ( GetOverlappedResult(hDir, &Overlapped, &OverlappedLength,
TRUE) )
// Do reed info, while there is:
do
{
// Try to read next result and read current Filename:
cbOffset = ChangesBuffer->NextEntryOffset;
String ChangedFile =
WideCharLenToString(ChangesBuffer->FileName, ChangesBuffer->FileNameLength);
// Update ChangesBuffer:
ChangesBuffer = (FILE_NOTIFY_INFORMATION*)
((LPBYTE)ChangesBuffer + cbOffset);
}
while (cbOffset != 0);
}
}
}
// Outer finally
__finally
{
// Cleanup:
CloseHandle(myServiceWatch);
delete ChangesBuffer;
}
}
Technical Details
Message-ID:
<42530459$1@newsgroups.borland.com>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!newshub.sdsu.edu!cyclone.bc.net!logbridge.uoregon.edu!newsfeeds.ihug.co.nz!ihug.co.nz!newsgroups.borland.com!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Thread: 10cc67,251d042661b6c50d,start X-Google-Attributes: gid10cc67,public X-Google-Language: ENGLISH,ASCII-7-bit From: "Zoetjuh" <peter@i-hate-spam.zoetjuh.demon.nl> Newsgroups: borland.public.cppbuilder.nativeapi Subject: ReadDirectoryChangesW - Access Violation Date: Tue, 5 Apr 2005 23:34:19 +0200 Lines: 90 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.2527 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2527 X-RFC2646: Format=Flowed; Original NNTP-Posting-Host: 82.161.4.111 Message-ID: <42530459$1@newsgroups.borland.com> X-Trace: newsgroups.borland.com 1112736857 82.161.4.111 (5 Apr 2005 14:34:17 -0800) Path: arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!newshub.sdsu.edu!cyclone.bc.net!logbridge.uoregon.edu!newsfeeds.ihug.co.nz!ihug.co.nz!newsgroups.borland.com!not-for-mail