windows文件處理---Win32

1. WIN32_FIND_DATA結構
    關於文件的全部屬性信息,總計有以下9種:文件的標題名,文件的屬性(只讀,存檔,隱藏等),文件的創建時間,文件的最後訪問時間,文件的最後修改時間,文件大小的高雙位字節,文件大小的低雙位字節,保留,保留。
   在使用FindFirstFile()和FindNextFile()函數去查找磁盤文件時,經常使用的一個數據結構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 hFile = FindFirstFile("c://test.dat", &ffd);
        在使用這個結構的時候不能手工修改這個結構中的任何數據,結構對於開發人員來說只能是隻讀數據,其所有成員變量都會由系統完成填寫。


2. FindFirstFile
  原形:
          HANDLE WINAPI  FindFirstFileW(
                       __in  LPCWSTR lpFileName,         // 文件名:可以使用指定文件名,也可以使用*.*,必須指定路徑
                       __out LPWIN32_FIND_DATAW lpFindFileData        // WIN32_FIND_DATA結構指針
          );

3. FindNextFile
  原形:
        BOOL WINAPI   FindNextFileW(
                      __in  HANDLE hFindFile,             // hFile handle
                      __out LPWIN32_FIND_DATAW lpFindFileData  // WIN32_FIND_DATA結構指針
           );
 注意:
        返回類型爲BOOL型

4. GetCurrentDirectory
  原形:
        DWORD WINAPI GetCurrentDirectoryW(
                     __in DWORD nBufferLength,
                    __out_ecount_part_opt(nBufferLength, return + 1) LPWSTR lpBuffer
              );

5. strcmpi
   原形:
       int strcmpi(const char* str1, const char* str2);

6. CompareFileTime
  原形:
       int CompareFileTime(LPFILETIME fileTime1, LPFILETIME fileTime2);

7. DeleteFile與CopyFile

8. 示例
// console.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>
#include <string.h>

#define FILE_MAX 300

int _tmain(int argc, _TCHAR* argv[])
{
 int i, j, nSrcFiles, nDestFiles;
 HANDLE hFile;
 WIN32_FIND_DATA fd, srcFiles[FILE_MAX], destFiles[FILE_MAX];
 BOOL bRet = TRUE;
 TCHAR src[MAX_PATH+1], dest[MAX_PATH+1], destpath[MAX_PATH+1];
 DWORD dwcNameSize = MAX_PATH + 1;
 TCHAR szBuf[MAX_PATH+1];

 
 lstrcpy(src, argv[1]);
 GetCurrentDirectory(dwcNameSize, szBuf);
 lstrcpy(dest, szBuf);
 lstrcpy(destpath, szBuf);
 lstrcat(src, "//*.*");   // c:/document/*.*
 lstrcat(dest, "//*.*");   // d:/document/*.*

 nSrcFiles = 0;     // display files of src directory
 bRet = TRUE;
 hFile = FindFirstFile(src, &fd);
 while (hFile != INVALID_HANDLE_VALUE && bRet)
 {
  if (fd.dwFileAttributes == FILE_ATTRIBUTE_ARCHIVE)
   srcFiles[nSrcFiles] = fd;   // add to an fd array
  printf("srcFiles[%d]: %s/n", nSrcFiles, fd.cFileName);
  nSrcFiles++;
  bRet = FindNextFile(hFile, &fd);
 }

 nDestFiles = 0;                // display files of dest directory
 bRet = TRUE;
 hFile = FindFirstFile(dest, &fd);
 while (hFile != INVALID_HANDLE_VALUE && bRet)
 {
  if (fd.dwFileAttributes == FILE_ATTRIBUTE_ARCHIVE)
   destFiles[nDestFiles] = fd;   // add to an fd array
  printf("destFiles[%d]: %s/n", nDestFiles, fd.cFileName);
  nDestFiles++;
  bRet = FindNextFile(hFile, &fd);
 }

 for(i=2;i<nSrcFiles;i++)
 {
  for (j=0;j<nDestFiles;j++)
  {
   if(strcmpi(srcFiles[i].cFileName, destFiles[j].cFileName) == 0)
   {
    printf("Match File: %s/n", srcFiles[i].cFileName);
    if (CompareFileTime(&srcFiles[i].ftLastWriteTime,&destFiles[j].ftLastWriteTime) > 0)
    {
     printf("File is modified: %s/n", srcFiles[i].cFileName);
     strcpy(dest, destpath);
     strcat(dest,"//");
     strcat(dest, srcFiles[i].cFileName);
     printf("copy file: %s/n", dest);
     DeleteFile(dest);
     CopyFile(srcFiles[i].cFileName, dest, FALSE);  // FALSE is Overwrite
    }
   }
  }
 
 }

 return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章