• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 用VC修改目錄的日期和時間

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    我們在 Windows 環境下 開發 某些具有數據備份和恢復等功能的軟件時,需要在拷貝文件及其目錄時把文件和目錄的所有屬性,包括日期和時間都能完全地保存并還原出來。但我們發現,在Windows環境下沒有提供任何方法和手段讓我們修改一個目錄的日期和時間。在查
    我們在Windows環境下開發某些具有數據備份和恢復等功能的軟件時,需要在拷貝文件及其目錄時把文件和目錄的所有屬性,包括日期和時間都能完全地保存并還原出來。但我們發現,在Windows環境下沒有提供任何方法和手段讓我們修改一個目錄的日期和時間。在查找Win32 API時也只能看到修改文件時間的API函數調用,沒有關于修改目錄時間的任何描述。在查看Windows提供的備份程序的功能實現時,發現它可以原樣地恢復所有子目錄的時間(很遺憾,根目錄的時間沒有恢復),于是我們就從與備份有關的Win32 API入手,終于找到解決之道:就是以“備份”方式,像打開文件那樣打開目錄。具體來說,就是以FILE—FLAG—BACKUP—SEMANTICS屬性來調用CreateFile() Win32 API函數來打開目錄,然后再調用和修改文件時間一樣的SetFileTime() Win32 API函數來修改目錄的時間即可。

      這樣,在我們的備份和恢復程序中,所有目錄(包括根目錄)都可以完全恢復原來的日期和時間了。同樣的技術也可以用于其它的用途,如可以考慮給Windows的資源管理器增加“修改目錄時間”的功能等。

      具體實現修改

      以下是具體實現的VC++ 6.0源代碼,它首先將指定目錄(如“C:\dir”)當前的時間顯示出來,然后把它修改成指定時間,最后把修改后的目錄的時間顯示出來。

      BOOL SetDirTime(char ?DirName, SYSTEMTIME new—stime) // 修改指定目錄的時間

      { HANDLE hDir;

    hDir = CreateFile (  // 打開目錄的Win32 API調用

    DirName,  

    GENERIC—READ | GENERIC—WRITE,

      // 必須“寫”方式打開

    FILE—SHARE—READ|FILE—SHARE—DELETE,NULL,OPEN—EXISTING,

      // 打開現存的目錄

    FILE—FLAG—BACKUP—SEMANTICS,

      // 只有這樣才能打開目錄

    NULL);

    if (hDir ==INVALID—HANDLE—VALUE )

    return FALSE; // 打開失敗時返回

    FILETIME lpCreationTime;  

      // creation time目錄的創建時間

    FILETIME lpLastAclearcase/" target="_blank" >ccessTime; // last access time最近一次訪問目錄的時間

    FILETIME lpLastWriteTime;  // last write time最近一次修改目錄的時間

    SystemTimeToFileTime(&new—stime, &lpCreationTime); // 轉換成文件的時間格式

    SystemTimeToFileTime(&new—stime, &lpLastAccessTime);

    SystemTimeToFileTime(&new—stime, &lpLastWriteTime);

    BOOL retval = SetFileTime( // 修改目錄時間的Win32 API函數調用

    hDir, &lpCreationTime,&lpLastAccessTime,&lpLastWriteTime);

      CloseHandle(hDir); // 關閉目錄

    return retval;

      // 返回修改成功與否的返回碼

      }

      BOOL GetDirTime(char ?DirName, SYSTEMTIME & stime) // 獲取指定目錄的時間

      { HANDLE hDir;

    hDir = CreateFile ( // 打開目錄的Win32 API調用

    DirName,  GENERIC—READ,

      // 只需讀方式打開即可

    FILE—SHARE—READ|FILE—SHARE—DELETE, NULL, OPEN—EXISTING,

      // 打開現存的目錄

    FILE—FLAG—BACKUP—SEMANTICS,NULL);

    FILETIME lpCreationTime;  

      // creation time目錄創建時間

    FILETIME lpLastAccessTime;

      // last access time目錄最近訪問時間

    FILETIME lpLastWriteTime;  

      // last write time目錄最近修改時間

    BOOL retval = GetFileTime(

      // 獲取目錄日期和時間的Win32 API調用

    hDir,&lpCreationTime,&lpLastAccessTime &lpLastWriteTime);

    if ( retval ){

    FILETIME ftime;

    FileTimeToLocalFileTime(&lpLastWriteTime, &ftime); // 轉換成本地時間

    FileTimeToSystemTime(&ftime, &stime) ; // 轉換成系統時間格式}

    CloseHandle(hDir);

    return retval;}

      int DoTest(char ?DirName)

      { SYSTEMTIME stime;

    printf(″testing for directory [%s]\n″, DirName);

    if ( GetDirTime(DirName, stime) )

      // 顯示修改前目錄的時間

    printf(″before change is %04d-%02d-%02d %02d:%02d:%02d\n″,

    stime.wYear , stime.wMonth , stime.wDay ,

    stime.wHour , stime.wMinute, stime.wSecond );

    else

    printf(″failed to get the datetime of directory...\n″);

    stime.wYear = 1995;

    stime.wMonth = 5;

    stime.wDay = 12;

    stime.wHour = 10 - 8; // GMT time, GMT+8 for China PRC

    stime.wMinute = 11;

    stime.wSecond = 12;

    // GetSystemTime(&stime);

      // 如果要設置成當前的時間

    if ( SetDirTime(DirName, stime) )

      // 修改目錄的時間

    printf(″success to change datetime of directory.\n″);

    else

    printf(″failed to change the datetime of directory...\n″);

    if ( GetDirTime(DirName, stime) )

      // 顯示修改后目錄的時間

    printf(″after change is %04d-%02d-%02d %02d:%02d:%02d\n″,stime.wYear , stime.wMonth , stime.wDay ,stime.wHour , stime.wMinute, stime.wSecond );

    else

    printf(″failed to get the datetime of directory...\n″);

    return 0;}

      void main(int argc, char? argv[])

      { DoTest(″c:\\dir″);} 

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>