1,监控请看:http://www.vckbase.com/document/viewdoc/?id=845
2.你可以定义全局变量,记录上一次文件末尾位置
2.你可以定义全局变量,记录上一次文件末尾位置
解决方案 »
- VS2008编译没有生成pdb文件,导致dllmain的断点跟不进去。
- 请教一个棘手的问题
- SHFileOperation函数 release 无法读取源文件
- 错误信息:c:\documents and settings\ll1\桌面\player\playerdlg.cpp(4) : fatal error C1853: 'Debug/Player.pch' is not a precompile
- 实在没分了,帮帮我,在线等
- 如何判断windows操作系统是中文简体版本?
- 为什么滚动视图有这样的不对齐?(《MFC Windows 程序设计》(第2版)上的P486-P495的一个例子).
- 如何在自制ActiveX控件中增一个弹出式菜单?
- 为什么我设的不规则对话框!隐藏后再显示就变成规则的了!
- 如何设置程序中一个DIALOG的颜色,而不是所有对话框的?
- d:\microsoft visual studio\myprojects\database\recordsetempoyees.h(15) : error C2504: 'CRecordset' : base class undefined
- 请问改变字体颜色..
=======================================================================
ReadDirectoryChangesW并不能在win2k以前的系统中使用,兼容性不好,且你的需求不需要使用该api可以用
FindFirstChangeNotification
FindNextChangeNotification
FindCloseChangeNotification以下是个使用的例子:#include <stdio.h>
#include <windows.h>char srcdirnamebuf[256];
char tardirnamebuf[256];char* tardirname;
char* srcdirname;HANDLE chghdls[2];void try_copy_file( char *srcdir, char *tardir, WIN32_FIND_DATA* wfd )
{
HANDLE tarfhdl;
FILETIME filetime;
char tarfilename[256];
char srcfilename[256];
sprintf( tarfilename, "%s\\%s", tardir, wfd->cFileName );
sprintf( srcfilename, "%s\\%s", srcdir, wfd->cFileName );
printf( "%s->%s\n", srcfilename, tarfilename );
tarfhdl = CreateFile( tarfilename,
STANDARD_RIGHTS_ALL,
FILE_SHARE_WRITE | FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
wfd->dwFileAttributes,
INVALID_HANDLE_VALUE );
if( tarfhdl == INVALID_HANDLE_VALUE )
{
if( GetLastError() == ERROR_FILE_NOT_FOUND )
{
CopyFile( srcfilename, tarfilename, TRUE );
printf( "Copy file:%s\n", tarfilename );
}
else
{
printf( "CreateFile%d\n", GetLastError() );
}
}
else
{
GetFileTime( tarfhdl, NULL, NULL, &filetime );
CloseHandle( tarfhdl );
if( filetime.dwLowDateTime < wfd->ftLastWriteTime.dwLowDateTime ||
filetime.dwHighDateTime < wfd->ftLastWriteTime.dwHighDateTime )
{
CopyFile( srcfilename, tarfilename, FALSE );
SetFileTime( tarfhdl, NULL, NULL, &wfd->ftLastWriteTime );
printf( "Merge file:%s->%s\n", srcfilename, tarfilename );
}
else if( filetime.dwLowDateTime > wfd->ftLastWriteTime.dwLowDateTime ||
filetime.dwHighDateTime > wfd->ftLastWriteTime.dwHighDateTime )
{
CopyFile( tarfilename, srcfilename, FALSE );
SetFileTime( tarfhdl, NULL, NULL, &filetime );
printf( "Merge file:%s->S\n", tarfilename, srcfilename );
}
}
}void merg_copy_dir( char* srcdir, char* tardir )
{
HANDLE searchhdl, tarfhdl;
FILETIME filetime;
WIN32_FIND_DATA srcwfd;
char searchname[256];
sprintf( searchname, "%s\\*", srcdir );
if( ( searchhdl = FindFirstFile( searchname, &srcwfd ) ) == INVALID_HANDLE_VALUE )
{
printf( "Copy directroy failed:FindFirstFile%d\n", GetLastError() );
return;
}
try_copy_file( srcdir, tardir, &srcwfd );
while( FindNextFile( searchhdl, &srcwfd ) )
{
try_copy_file( srcdir, tardir, &srcwfd );
}
FindClose( searchhdl );
}void guard_func( void *dummy )
{ while (TRUE)
{
switch( WaitForMultipleObjects( 2, chghdls, FALSE, INFINITE ) )
{
case WAIT_OBJECT_0:
printf( "Directory(%s)change detected!\n", srcdirname );
merg_copy_dir( srcdirname, tardirname );
merg_copy_dir( tardirname, srcdirname );
FindNextChangeNotification( chghdls[0] );
break;
case WAIT_OBJECT_0 + 1:
printf( "Directory(%s)change detected!\n", tardirname );
merg_copy_dir( tardirname, srcdirname );
merg_copy_dir( srcdirname, tardirname );
FindNextChangeNotification( chghdls[1] );
break;
}
}
}int main( int argc, char *argv[ ] )
{
if (argc != 3)
{
printf( "Please input 1st Directory you want to guard:" );
scanf( "%s", srcdirnamebuf );
srcdirname = srcdirnamebuf;
printf( "Please input 2nd Directory you want to guard:" );
scanf( "%s", tardirnamebuf );
tardirname = tardirnamebuf;
}
else
{
srcdirname = argv[1];
tardirname = argv[2];
}
chghdls[0] = FindFirstChangeNotification( srcdirname,
FALSE,
FILE_NOTIFY_CHANGE_FILE_NAME |
FILE_NOTIFY_CHANGE_ATTRIBUTES |
FILE_NOTIFY_CHANGE_SIZE |
FILE_NOTIFY_CHANGE_LAST_WRITE |
FILE_NOTIFY_CHANGE_SECURITY );
if (chghdls[0] == INVALID_HANDLE_VALUE)
{
printf( "Error:%d\n", GetLastError() );
exit( 1 );
}
chghdls[1] = FindFirstChangeNotification( tardirname,
FALSE,
FILE_NOTIFY_CHANGE_FILE_NAME |
FILE_NOTIFY_CHANGE_ATTRIBUTES |
FILE_NOTIFY_CHANGE_SIZE |
FILE_NOTIFY_CHANGE_LAST_WRITE |
FILE_NOTIFY_CHANGE_SECURITY );
if (chghdls[1] == INVALID_HANDLE_VALUE)
{
printf( "Error:%d\n", GetLastError() );
exit( 1 );
} _beginthread( guard_func, 0, NULL );
printf( "Gurading...Press Q to stop..." );
while( getchar( ) != 'Q' );
FindCloseChangeNotification( chghdls[0] );
FindCloseChangeNotification( chghdls[1] );
system( "PAUSE" );
return;
}