六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

在VC++下對文件屬性的取得與更改

[摘要]信息產業部電子第二十二研究所青島分所 郎銳   摘要:本文講述了在Visual C++ 下編程實現對磁盤文件的屬性進行獲取以及更改的一般方法,并給出部分相關的關鍵代碼。  一、 引言   文件是數...
信息產業部電子第二十二研究所青島分所  郎銳

  摘要:本文講述了在Visual C++ 下編程實現對磁盤文件的屬性進行獲取以及更改的一般方法,并給出部分相關的關鍵代碼。

  一、 引言

  文件是數據在磁盤上最常用的一種存放形式,也是在程序設計中與之經常打交道的一種編程對象,不少程序尤其是數據傳輸和處理類的應用程序更是需要頻繁的創建、讀取和寫入文件。對于一些要求不是很嚴格的程序,我們往往只關心文件的內容是否正確、文件大小是否有增減或是再嚴格一些,看文件名是否符合規定等等。以上這些要素對于大多數程序而言顯然是可以滿足實際需求的,但對于某些特殊行業的一些有著比較嚴格要求的軟件系統,僅有以上要素還是遠遠不夠的,往往還需要對文件的所有屬性諸如文件的創建時間、文件的最后訪問時間、文件的最后修改時間等等進行提取處理與重新設置。

  二、 WIN32_FIND_DATA結構

  關于文件的全部屬性信息,總計有以下以下9種:文件的標題名、文件的屬性(只讀、存檔,隱藏等)、文件的創建時間、文件的最后訪問時間、文件的最后修改時間、文件大小的高位雙字、文件大小的低位雙字、保留、保留。在這里只有文件標題名和文件的長度可以通過CFile類比較方便的獲得,而對于其他幾種屬性的獲取和設置就無能為力了。

  在用findfirst()和findnext()函數去查找磁盤文件時經常使用的一個數據結構WIN32_FIND_DATA的成員變量里包含了以上所有的文件屬性,因此可以通過這個結構作為獲取和更改文件屬性的手段。該結構的內容如下:

typedef struct _WIN32_FIND_DATA {
  DWORD dwFileAttributes; //文件屬性
  FILETIME ftCreationTime; // 文件創建時間
  FILETIME ftLastAccessTime; // 文件最后一次訪問時間
  FILETIME ftLastWriteTime; // 文件最后一次修改時間
  DWORD nFileSizeHigh; // 文件長度高32位
  DWORD nFileSizeLow; // 文件長度低32位
  DWORD dwReserved0; // 系統保留
  DWORD dwReserved1; // 系統保留
  TCHAR cFileName[ MAX_PATH ]; // 長文件名
  TCHAR cAlternateFileName[ 14 ]; // 8.3格式文件名
} WIN32_FIND_DATA, *PWIN32_FIND_DATA;

  可以通過FindFirstFile()函數根據當前的文件存放路徑查找該文件來把待操作文件的相關屬性讀取到WIN32_FIND_DATA結構中去:

WIN32_FIND_DATA ffd ;
HANDLE hFind = FindFirstFile("c:\\test.dat",&ffd);

  在使用這個結構時不能手工修改這個結構中的任何數據,結構對于開發人員來說只能作為一個只讀數據,其所有的成員變量都會由系統完成填寫。在MSDN幫助中可以查找到關于WIN32_FIND_DATA結構的更加詳細的說明。

  三、 文件屬性信息的獲取與更改

  為了更好的保存獲取到的文件屬性信息,對應于文件屬性構造一個自定義的FILE_INFO數據結構,獲取的屬性信息可暫存于此:

typedef struct _FILE_INFO {
  TCHAR szFileTitle[128]; //文件的標題名
  DWORD dwFileAttributes; //文件的屬性
  FILETIME ftCreationTime; //文件的創建時間
  FILETIME ftLastAccessTime; //文件的最后訪問時間
  FILETIME ftLastWriteTime; //文件的最后修改時間
  DWORD nFileSizeHigh; //文件大小的高位雙字
  DWORD nFileSizeLow; //文件大小的低位雙字
  DWORD dwReserved0; //保留,為0
  DWORD dwReserved1; //保留,為0
} FILE_INFO, * PFILE_INFO;

  首先用FindFirstFile()函數將文件屬性獲取到WIN32_FIND_DATA 結構對象FindFileData中去,之后可以用FindClose()將其關閉,并把FindFileData中的有關文件屬性信息的內容復制到自定義結構FILE_INFO的結構對象FileInfo中備用。下面是關于這部分描述的部分關鍵代碼:

//聲明結構對象
FILE_INFO FileInfo;
WIN32_FIND_DATA FindFileData;
……
//獲取文件屬性信息
FindClose(FindFirstFile("Test.txt",&FindFileData));
memset(&FileInfo,0,sizeof(FILE_INFO));
……
//將文件屬性信息保存到FileInfo中備用
strcpy(FileInfo.szFileTitle,myFile.GetFileTitle());
FileInfo.dwFileAttributes = FindFileData.dwFileAttributes;
FileInfo.ftCreationTime = FindFileData.ftCreationTime;
FileInfo.ftLastAccessTime = FindFileData.ftLastAccessTime;
FileInfo.ftLastWriteTime = FindFileData.ftLastWriteTime;
FileInfo.nFileSizeHigh = FindFileData.nFileSizeHigh;
FileInfo.nFileSizeLow = FindFileData.nFileSizeLow;
……

  在獲取到文件的原始屬性信息后既可以原封不動的將屬性重新寫到文件,也可以對其中某一項或某幾項屬性內容進行修改后再行寫入文件,從而達到更改文件屬性的目的。比如可以用SetFileTime()函數設置文件的創建時間、最近一次訪問時間以及最近一次修改的時間等等:

SetFileTime((HANDLE)destFile.m_hFile, //待寫入的文件句柄
&FileInfo.ftCreationTime, //文件的創建時間
&FileInfo.ftLastAccessTime, //文件最近一次的訪問時間
&FileInfo.ftLastWriteTime); //文件最近一次的修改時間

  也可以用SetFileAttributes() 函數實現對文件屬性的修改:

SetFileAttributes(FileInfo.szFileTitle,FileInfo.dwFileAttributes);

  至于文件名的修改則更加簡單,直接在創建文件時在CreateFile()或CFile類的成員函數Open里直接對文件名參數進行設置即可。

  小結:本文通過對WIN32_FIND_DATA結構和SetFileTime()、SetFileAttributes()等主要函數實現了對磁盤文件的相關屬性信息的獲取與修改。用此技術可以在通訊等對文件有嚴格要求的應用領域實現文件全部信息(包括文件內容、文件名以及文件屬性等)的完整傳送。本文所述程序在Windows 98下由Microsoft Visual C++ 6.0編譯調試通過。


主站蜘蛛池模板: 制服丝袜自拍偷拍 | 青青青免费高清视频在线 | 欧美系列在线播放 | 四虎影院观看视频 | 日本一区二区三区中文字幕视频 | 欧美一级视频高清片 | 日韩国产欧美视频 | 日本欧美一级二级三级不卡 | 亚洲线精品一区二区三区 | 色综合久久天天综线观看 | 日本一区视频 | 青青草视频在线免费观看 | 四虎影院精品在线观看 | 亚洲狠狠婷婷综合久久久久图片 | 亚洲福利视频网站 | 亚洲一级片在线播放 | 亚洲欧美男人天堂 | 字幕网中文aⅴ资源站 | 色综合久久天天影视网 | 热の综合热の国产热の潮小说 | 欧美一卡二卡3卡4卡无卡免费 | 午夜轮理| 无声在线完整版免费观看 | 色偷偷亚洲第一成人综合网址 | 自拍视频在线观看视频精品 | 日韩大片免费在线观看 | 五月天堂婷婷 | 天美视频在线观看 | 青青青国产精品视频 | 最新国产你懂的在线网址 | 四虎影院永久网站 | 日本午色www高清视频 | 伊人www| 伊人网2021| 伊人网在线播放 | 一区二区三区在线视频观看 | 婷婷九月色 | 日本亚洲一区二区三区 | 欧美在线观看黄色 | 亚洲国产系列久久精品99人人 | 亚洲欧美久久婷婷爱综合一区天堂 |