C++擷取一個目錄下的所有檔案

來源:互聯網
上載者:User

轉自:http://www.yuloo.com/news/1007/448756.html  

    #include<iostream>   #include<io.h>
  using namespace std;
  void main()
  {
  _finddata_t file;
  long lf;
  if((lf = _findfirst("C:\\WINDOWS\\*.*", &file))==-1l)//_findfirst返回的是long型; long __cdecl _findfirst(const char *, struct _finddata_t *)
  cout<<"檔案沒有找到!\n";
  else
  {
  cout<<"\n檔案清單:\n";
  while( _findnext( lf, &file ) == 0 )//int __cdecl _findnext(long, struct _finddata_t *);如果找到下個檔案的名字成功的話就返回0,否則返回-1
  {
  cout<<file.name;
  if(file.attrib == _A_NORMAL)cout<<" 普通檔案 ";
  else if(file.attrib == _A_RDONLY)cout<<" 唯讀檔案 ";
  else if(file.attrib == _A_HIDDEN )cout<<" 隱藏檔案 ";
  else if(file.attrib == _A_SYSTEM )cout<<" 系統檔案 ";
  else if(file.attrib == _A_SUBDIR)cout<<" 子目錄 ";
  else cout<<" 封存檔案 ";
  cout<<endl;
  }
  }
  _findclose(lf);

  }


轉自:http://blog.sina.com.cn/s/blog_686d0fb001012uuc.html

之前看過一篇有關檔案屬性及目錄列表的操作。假如我們要對某一目錄下的所有檔案進行操作,那麼不得不遇到遍曆檔案的問題。

下面給出遍曆D盤下的所有檔案的程式,同時輸出了每個檔案的屬性。遍曆其他檔案則類似。

 

來源程式清單:

#include<iostream>
#include<string.h>
#include<io.h>
FILE *fp;
using namespace std;
void traval(char name[]);//遍曆一個目錄
//int i=0;
void main()
{
 if((fp=fopen("data.txt","w"))==NULL)
 {
  cout<<"開啟寫檔案失敗。\n";
  return;
 }
 char name[250]="D:\\*.*";
 traval(name);
 fclose(fp);
}

void traval(char name[])//遍曆一個目錄
{
 char name1[250];
 //cout<<name;
 //fprintf(fp,"%s  ****%d",name,++i);
 _finddata_t file;
 long lf;
 if((lf=_findfirst(name,&file))==-1l)
 {
  cout<<"該目錄不存在。\n";
  fprintf(fp,"該目錄不存在。\n");
 }
 else
 {
  while(_findnext(lf,&file)==0)
  {
   if(file.name[2]==0)
    continue;
   cout<<file.name<<"\t";
   fprintf(fp,"%s\t",file.name);
   if(file.attrib==0)
   {
    cout<<"正常 ";
    fprintf(fp,"正常 ");
   }
   if((file.attrib%2)==1)
   {
    cout<<"唯讀 ";
    fprintf(fp,"唯讀 ");
   }
   if((file.attrib==2)||(file.attrib==3)||(file.attrib==6)||(file.attrib==7)||
    (file.attrib==18)||(file.attrib==19)||(file.attrib==22)||(file.attrib==23)||
    (file.attrib==34)||(file.attrib==35)||(file.attrib==38)||(file.attrib==39)||
    (file.attrib==50)||(file.attrib==51)||(file.attrib==54)||(file.attrib==55))
   {
    fprintf(fp,"%s\t",file.name);
    cout<<"隱藏 ";
    fprintf(fp,"隱藏 ");
   }
   if((file.attrib==4)||(file.attrib==5)||(file.attrib==6)||(file.attrib==7)||
    (file.attrib==20)||(file.attrib==21)||(file.attrib==22)||(file.attrib==23)||
    (file.attrib==36)||(file.attrib==37)||(file.attrib==38)||(file.attrib==39)||
    (file.attrib==52)||(file.attrib==53)||(file.attrib==54)||(file.attrib==55))
   {
    cout<<"系統 ";
    fprintf(fp,"系統 ");
   }
   if((file.attrib>=32&&file.attrib<=55))
   {
    cout<<"存檔 ";
    fprintf(fp,"存檔 ");
   }
   if((file.attrib>=16&&file.attrib<=23)||(file.attrib>=48&&file.attrib<=55))
   {
    cout<<"檔案夾 ";
    cout<<endl;
    fprintf(fp,"檔案夾\n");
    strcpy(name1,name);
    name[strlen(name)-3]='\0';//最後三個字元去掉
    name=strcat(name,file.name);//
    name=strcat(name,"\\*.*");
    cout<<endl<<name<<endl;
    //fprintf(fp,"\n%s\n",name1);
    traval(name);
    strcpy(name,name1);
   }
   else
   {
    cout<<endl;
    fprintf(fp,"\n");
   }
  }
 }
 _findclose(lf);
}

 

由於隱私問題,運行結果就不貼出來了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.