1. 程式人生 > >c++對檔案進行操作之遍歷雙層檔案結構

c++對檔案進行操作之遍歷雙層檔案結構

/*本程式碼實現遍歷雙層次層次的目錄結構*/
#include<stdio.h>
#include<iostream>
#include<io.h>
#include<cstring>
using namespace std;
const char path[100]="F:/OCR/*";
int main()
{
	struct _finddata_t fileinfo;
	char rootname[100];
	long handle;
	handle=_findfirst(path,&fileinfo);
	if(handle==-1)
	{
		cout<<"檔案路徑錯誤..."<<endl;
		return 0;
	}
	else
	{
		do{
			if((fileinfo.attrib & _A_SUBDIR) && (strcmp(fileinfo.name,".")!=0) && (strcmp(fileinfo.name,"..")!=0) ) //用來判斷一個檔案是不是資料夾
			{
				int num=0;
				long subhandle;//子資料夾的控制代碼
				char subpath[100];//子資料夾的路徑
				strcpy(subpath,path);  subpath[strlen(path)-1]='\0'; //把path中的*去掉
				strcat(subpath,fileinfo.name); strcat(subpath,"/*"); //生成新的子路徑
				struct _finddata_t subinfo;//子資料夾下用來遍歷的結構體
				subhandle=_findfirst(subpath,&subinfo);
				if(subhandle==-1)
				{
					cout<<"子檔案"<<fileinfo.name<<"開啟失敗"<<endl;
				}else
				{
					do{
						num++;
						cout<<subinfo.name<<endl;
					}while(_findnext(subhandle,&subinfo)==0);
					_findclose(subhandle);
					cout<<"如上所示檔案"<<fileinfo.name<<"共有"<<num-2<<"個檔案"<<endl<<endl;/*因為我在
					遍歷子資料夾的時候沒有去判斷 .和..這兩種特殊檔案,原諒我有點偷懶了*/
				}
			}
			else
			{
			   if(!fileinfo.attrib & _A_SUBDIR)	
				  cout<<fileinfo.name<<endl;
			}	
		}while(_findnext(handle,&fileinfo)==0);
		_findclose(handle);
	}
	return 0;
}