windows api 學習

來源:互聯網
上載者:User

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.