C++獲取一個目錄下的所有檔案
阿新 • • 發佈:2019-01-30
轉自: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); }