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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值