
/**//************************************************************************/

/**//*
* Name: 文件属性克隆器 <CloneAttribute.cpp>
*
* Author: M.A.O
*
* E-mail: Inventworm@hotmail.com
*
* Compiled on : Windows XP2 VC++6.0
*/

/**//************************************************************************/

#include <windows.h>
#include <iostream.h>
#include <stdio.h>

FILETIME ftCreate;
FILETIME ftWrite;
FILETIME ftAccess;
FILETIME ftCreate_last;
FILETIME ftWrite_last;
FILETIME ftAccess_last;

//获得系统根目录
char* _GetSysDirectory();

//获得克隆文件句柄
HANDLE _GetFileHandle(char* pszFile);

//获得文件时间信息
BOOL _GetFileTimeInfo(HANDLE hFile);

//设置文件时间信息
BOOL _SetFileTimeInfo(HANDLE hFile);

//获得文件属性信息
DWORD _GetFileAttrbute(char* pszFileName);

//设置文件属性信息
BOOL _SetFileAttribute(char* pszFileName);

//使用方法
void Usage();

int main(int argc,char* argv[])

...{
//文件名或者文件路径
char szFile_1[MAX_PATH];
char szFile_2[MAX_PATH];

HANDLE hFile_1 = NULL;
HANDLE hFile_2 = NULL;

BOOL bGetFileTime = FALSE;
BOOL bSetFileTime = FALSE;

DWORD dwGetFileAttributes = 0;

cout<<"请输入拷贝源文件:";
cin>>szFile_1;

cout<<"请输入目标文件:";
cin>>szFile_2;
hFile_1 = _GetFileHandle(szFile_1);
hFile_2 = _GetFileHandle(szFile_2);

if (hFile_1 == INVALID_HANDLE_VALUE)

...{
cout<<"CreateFile_1 Failed...."<<endl;
}
if (hFile_2 == INVALID_HANDLE_VALUE)

...{
cout<<"CreateFile_2 Failed...."<<endl;
}

if (!_GetFileTimeInfo(hFile_1))

...{
cout<<"GetFileTime Failed...."<<endl;
}
else

...{
ftCreate_last = ftCreate;
ftAccess_last = ftAccess;
ftWrite_last = ftWrite;
}

if (!_SetFileTimeInfo(hFile_2))

...{
cout<<"SetFileTime Failed...."<<endl;
}

dwGetFileAttributes = _GetFileAttrbute(szFile_1);

cout<<"FileAttribute"<<dwGetFileAttributes<<endl;
cout<<"File_1-"<<hFile_1<<endl;
cout<<"File_2-"<<hFile_2<<endl;

return 0;
}

char* _GetSysDirectory()

...{
char *temp = NULL;

return temp;
}

HANDLE _GetFileHandle(char* pszFile)

...{
HANDLE hFile = NULL;

hFile = CreateFile(pszFile,GENERIC_WRITE | GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

return hFile;
}

BOOL _GetFileTimeInfo(HANDLE hFile)

...{
BOOL bGetFileTime = FALSE;
bGetFileTime = GetFileTime(hFile,&ftCreate,&ftAccess,&ftWrite);

return bGetFileTime;
}

BOOL _SetFileTimeInfo(HANDLE hFile)

...{
BOOL bSetFileTime = FALSE;

bSetFileTime = SetFileTime(hFile,&ftCreate_last,&ftAccess_last,&ftWrite_last);

return bSetFileTime;
}

DWORD _GetFileAttrbute(char* pszFileName)

...{
DWORD dwFileAttribute = 0;

dwFileAttribute = GetFileAttributes(pszFileName);

return dwFileAttribute;
}

BOOL _SetFileAttribute(char* pszFileName)

...{
return FALSE;
}

void Usage()

...{

}


/**//************************************************************************/

/**//* #define FILE_SHARE_READ 0x00000001
#define FILE_SHARE_WRITE 0x00000002
#define FILE_SHARE_DELETE 0x00000004
#define FILE_ATTRIBUTE_READONLY 0x00000001
#define FILE_ATTRIBUTE_HIDDEN 0x00000002
#define FILE_ATTRIBUTE_SYSTEM 0x00000004
#define FILE_ATTRIBUTE_DIRECTORY 0x00000010
#define FILE_ATTRIBUTE_ARCHIVE 0x00000020
#define FILE_ATTRIBUTE_ENCRYPTED 0x00000040
#define FILE_ATTRIBUTE_NORMAL 0x00000080
#define FILE_ATTRIBUTE_TEMPORARY 0x00000100
#define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
#define FILE_ATTRIBUTE_COMPRESSED 0x00000800
#define FILE_ATTRIBUTE_OFFLINE 0x00001000
#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
#define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
#define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
#define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
#define FILE_NOTIFY_CHANGE_SIZE 0x00000008
#define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
#define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
#define FILE_NOTIFY_CHANGE_CREATION 0x00000040
#define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
#define FILE_ACTION_ADDED 0x00000001
#define FILE_ACTION_REMOVED 0x00000002
#define FILE_ACTION_MODIFIED 0x00000003
#define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
#define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
#define MAILSLOT_NO_MESSAGE ((DWORD)-1)
#define MAILSLOT_WAIT_FOREVER ((DWORD)-1)
#define FILE_CASE_SENSITIVE_SEARCH 0x00000001
#define FILE_CASE_PRESERVED_NAMES 0x00000002
#define FILE_UNICODE_ON_DISK 0x00000004
#define FILE_PERSISTENT_ACLS 0x00000008
#define FILE_FILE_COMPRESSION 0x00000010
#define FILE_VOLUME_QUOTAS 0x00000020
#define FILE_SUPPORTS_SPARSE_FILES 0x00000040
#define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
#define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
#define FILE_VOLUME_IS_COMPRESSED 0x00008000
#define FILE_SUPPORTS_OBJECT_IDS 0x00010000
#define FILE_SUPPORTS_ENCRYPTION 0x00020000
*/

/**//************************************************************************/
因为时间关系,功能还没有写完,现在仅仅实现了文件时间的Copy,应该还有一个属性的拷贝,这个已经给出了思路,其实上面的写法有些冗余,完全可以调用GetFileAttributesEx函数得到所有的信息,有兴趣的话可以试试,不明白的可以参照MSDN或者联系我,大家一同学习