文件属性克隆器

/************************************************************************/
/* 
 *   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或者联系我,大家一同学习
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值