例子一:
TestApp.cpp
#include <set>
#include "USNMethod.h"
using namespace std;
int main()
{
// 获得所有变化记录
deque<MY_USN_RECORD> con;
EnumUsnRecord( "F", con );
// 搜寻文件名为"testXML.xml"的文件号(可能有多个)
set<DWORDLONG> con2;
for( deque<MY_USN_RECORD>::const_iterator itor=con.begin(); itor!=con.end(); ++itor )
{
const MY_USN_RECORD& mur = *itor;
if( _wcsicmp(mur.FileName,L"testXML.xml") == 0 )
{
con2.insert( mur.FileReferenceNumber );
}
}
// 遍历其历史操作
setlocale( LC_CTYPE, "chs" );
for( set<DWORDLONG>::const_iterator itor2=con2.begin(); itor2!=con2.end(); ++itor2 )
{
for( deque<MY_USN_RECORD>::const_iterator itor=con.begin(); itor!=con.end(); ++itor )
{
const MY_USN_RECORD& mur = *itor;
if( *itor2 == mur.FileReferenceNumber )
{
FILETIME timestamp;
FileTimeToLocalFileTime( &(FILETIME&)mur.TimeStamp, ×tamp );
SYSTEMTIME st;
FileTimeToSystemTime( ×tamp, &st );
printf( "%04d-%02d-%02d %02d:%02d:%02d " , st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond );
if( mur.Reason&USN_REASON_DATA_OVERWRITE )
{
printf( "%s|", "DATA_OVERWRITE" );
}
if( mur.Reason&USN_REASON_DATA_EXTEND )
{
printf( "%s|", "DATA_EXTEND" );
}
if( mur.Reason&USN_REASON_DATA_TRUNCATION )
{
printf( "%s|", "DATA_TRUNCATION" );
}
if( mur.Reason&USN_REASON_NAMED_DATA_OVERWRITE )
{
printf( "%s|", "NAMED_DATA_OVERWRITE" );
}
if( mur.Reason&USN_REASON_NAMED_DATA_EXTEND )
{
printf( "%s|", "NAMED_DATA_EXTEND" );
}
if( mur.Reason&USN_REASON_NAMED_DATA_TRUNCATION )
{
printf( "%s|", "NAMED_DATA_TRUNCATION" );
}
if( mur.Reason&USN_REASON_FILE_CREATE )
{
printf( "%s|", "FILE_CREATE" );
}
if( mur.Reason&USN_REASON_FILE_DELETE )
{
printf( "%s|", "FILE_DELETE" );
}
if( mur.Reason&USN_REASON_EA_CHANGE )
{
printf( "%s|", "EA_CHANGE" );
}
if( mur.Reason&USN_REASON_SECURITY_CHANGE )
{
printf( "%s|", "SECURITY_CHANGE" );
}
if( mur.Reason&USN_REASON_RENAME_OLD_NAME )
{
printf( "%s|", "RENAME_OLD_NAME" );
}
if( mur.Reason&USN_REASON_RENAME_NEW_NAME )
{
printf( "%s|", "RENAME_NEW_NAME" );
}
if( mur.Reason&USN_REASON_INDEXABLE_CHANGE )
{
printf( "%s|", "INDEXABLE_CHANGE" );
}
if( mur.Reason&USN_REASON_BASIC_INFO_CHANGE )
{
printf( "%s|", "BASIC_INFO_CHANGE" );
}
if( mur.Reason&USN_REASON_HARD_LINK_CHANGE )
{
printf( "%s|", "HARD_LINK_CHANGE" );
}
if( mur.Reason&USN_REASON_COMPRESSION_CHANGE )
{
printf( "%s|", "COMPRESSION_CHANGE" );
}
if( mur.Reason&USN_REASON_ENCRYPTION_CHANGE )
{
printf( "%s|", "ENCRYPTION_CHANGE" );
}
if( mur.Reason&USN_REASON_OBJECT_ID_CHANGE )
{
printf( "%s|", "OBJECT_ID_CHANGE" );
}
if( mur.Reason&USN_REASON_REPARSE_POINT_CHANGE )
{
printf( "%s|REPARSE_POINT_CHANGE", "" );
}
if( mur.Reason&USN_REASON_STREAM_CHANGE )
{
printf( "%s|", "STREAM_CHANGE" );
}
if( mur.Reason&USN_REASON_TRANSACTED_CHANGE )
{
printf( "%s|", "TRANSACTED_CHANGE" );
}
if( mur.Reason&USN_REASON_CLOSE )
{
printf( "%s|", "CLOSE" );
}
printf( "\n " );
bool PrintFullPath( const MY_USN_RECORD& mur, const deque<MY_USN_RECORD>&