windows api 学习

 #include <stdio.h>
#include <windows.h>
#include <time.h>
#include <shlobj.h>
/*
作者:苑文
时间:2007-12-28
e-mail:wenwen227@126.com
调试环境:windows xp + dev-C++
功能:常用Windows api学习实践
1.文件夹选择对话框
2.文件夹遍历的实现
3.大文件的显示方法
简单介绍:
  遍历指定文件夹下的所有文件和文件夹
  没有选定文件夹则取当前文件所在文件夹
  统计最大文件的路径,大小
  统计最新创建的文件
  
*/
void browse(char* strdir);
unsigned int filecount = 0; //文件数
unsigned int dircount = 0;//目录数
unsigned int maxsize = 0; //最大文件
char maxfilepath[MAX_PATH];
char* SelectFolder(char* PathName);
int main(int argc, char *argv[])
{
  char filepath[MAX_PATH];
  clock_t start, finish;
  SelectFolder(filepath);
  i = strlen(filepath);
  if(0 == i)//选择框没有返回路径,则取默认路径
  {
    strcpy(filepath,argv[0]);
    i = strlen(filepath);
    for(;filepath[i]!='//';i--);
    filepath[i] = '/0';
  }
  filepath[i]='//';
  filepath[i+1]='*';
  filepath[i+2]='/0';
  start = clock();
  browse(filepath);//filepath
  finish = clock();
  printf("耗时:%dms 文件数:%d 目录数:%d/n",finish-start,filecount,dircount,maxsize);
  printf("最大文件路径:/n%s/n",maxfilepath);
  system("PAUSE"); 
  return 0;
}
/*
struct _WIN32_FIND_DATAA {
    DWORD dwFileAttributes;      文件属性
 FILETIME ftCreationTime;     创建时间
 FILETIME ftLastAccessTime;   访问时间
 FILETIME ftLastWriteTime;    修改时间
 DWORD nFileSizeHigh;         文件大小 高字节
 DWORD nFileSizeLow;          文件大小  低字节
 DWORD dwReserved0;           保留
 DWORD dwReserved1;           保留
 CHAR cFileName[MAX_PATH];    文件名
 CHAR cAlternateFileName[14]; 不知道
}
*/
void browse(char* strdir)
{
WIN32_FIND_DATAA wfd;
HANDLE m_hFle = FindFirstFile(strdir, &wfd);
DWORD errCod = 0;
char fullPath[MAX_PATH];  
if (INVALID_HANDLE_VALUE != m_hFle)
{
  do
  {    
    strcpy(fullPath,strdir);  
    fullPath[strlen(fullPath) - strlen("*")] =  '/0';//去掉//*  
    strcat(fullPath,wfd.cFileName);   
    if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    {//目录
      if(wfd.cFileName[0] != '.')
      {                   
      strcat(fullPath,"//*");  
      //printf(fullPath);
      browse(fullPath);   //递归扫描该文件夹的子文件  
      dircount++;
      }
    }
    else//文件
    {
     //printf("%s filesize=%d/n",wfd.cFileName,wfd.nFileSizeLow);
     filecount++;
     if(wfd.nFileSizeLow > maxsize)
     {
       maxsize = wfd.nFileSizeLow;
       sprintf(maxfilepath,"%s",fullPath);
     }
    }
   }while(FindNextFile(m_hFle, &wfd));
}

 if (INVALID_HANDLE_VALUE != m_hFle)
 {
  FindClose(m_hFle);
 }
}

char* SelectFolder(char* PathName)
{
    BROWSEINFO bi;           //控制Browse对话框上属性的结构体
    LPITEMIDLIST ItemID;
    //char sDir[MAX_PATH];       //MAX_PATH:系统常量,指最大路径长度
    char FolderName[MAX_PATH];
    memset(&bi, 0, sizeof(BROWSEINFO));          //清零
    PathName[0] = '/0';
    //memset(sDir, 0, MAX_PATH);
    bi.hwndOwner      = NULL;       //父窗口句柄
    bi.pszDisplayName = FolderName;                 //存放路径的缓冲区
    bi.lpszTitle      = "你好吗?";               //对话框标题
    bi.ulFlags        = BIF_RETURNONLYFSDIRS;       //只显示文件系统文件夹
    ItemID = SHBrowseForFolder(&bi);
    if(ItemID==NULL)
    return PathName;
    SHGetPathFromIDList(ItemID, PathName);
    return PathName;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值