C++이용findfirst 와findnext 파일 찾 는 방법

C++파일 찾기
C++에서 우 리 는 어떻게 파일 을 찾 아야 합 니까?우 리 는 구조 체 와 모두 가 잘 모 를 수 있 는 몇 개의 함수 가 필요 하 다.이 함수 와 구조 체 가 있 는 헤더 파일 에서 구조 체 는 structfinddata_t,함 수 는findfirst、_findnext 와fineclose。구체 적 으로 어떻게 사용 하 는 지 아래 에서 함께 봅 시다.
_findfirst 와findnext 파일 찾기
하나,이 두 함 수 는 모두 io.h 안에 있 습 니 다.
2.먼저 파일 구조 체 를 알 아 보 세 요.

struct _finddata_t {
 unsigned attrib;
 time_t  time_create; 
 time_t  time_access; 
 time_t  time_write;
 _fsize_t size;
 char  name[260];
};
time_t,사실은 long
그리고fsize_t,바로 unsigned long
이제 구조 체 의 데이터 멤버 를 설명해 보 자.
attrib,바로 찾 은 파일 의 속성 입 니 다:A_ARCH(압축 파일),A_HIDDEN(숨 김),A_NORMAL(정상),A_RDONLY(읽 기만),A_SUBDIR(폴 더),A_SYSTEM.
time_create、time_access 와 timewrite 는 각각 파일 을 만 드 는 시간,마지막 으로 파일 에 접근 하 는 시간,파일 이 마지막 으로 수 정 된 시간 입 니 다.
크기:파일 크기
파일 이름
3.용findfirst 와findnext 파일 찾기
1、_findfirst 함수:long _findfirst(const char *, struct _finddata_t *);첫 번 째 매개 변 수 는 파일 이름 으로'*.*'로 모든 파일 을 찾 을 수 있 고'*.cpp'로.cpp 파일 을 찾 을 수 있 습 니 다.두 번 째 매개 변 수 는finddata_t 구조 체 포인터.검색 에 성공 하면 파일 핸들 을 되 돌려 줍 니 다.실패 하면-1 을 되 돌려 줍 니 다.
2、_findnext 함수:int _findnext(long, struct _finddata_t *);첫 번 째 매개 변 수 는 파일 핸들 이 고 두 번 째 매개 변 수 는 똑 같이 입 니 다.finddata_t 구조 체 포인터.검색 에 성공 하면 0 으로 돌아 가 고 실패 하면-1 로 돌아 갑 니 다.
3、_findclose()함수:int _findclose(long);매개 변수,파일 핸들 만 있 습 니 다.닫 기 에 성공 하면 0 으로 되 돌아 갑 니 다.-1 로 되 돌아 갑 니 다.

#include <io.h>
#include <iostream>
#include <fstream>
using namespace std;

bool transfer(string fileName, int exeNum );
void dfsFolder(string folderPath, ofstream &fout);

int main()
{
  _finddata_t file;
  int k;
  long HANDLE;
  k = HANDLE = _findfirst("*.*", &file);
  while (k != -1)
  {
    cout << file.name << endl;
    k = _findnext(HANDLE, &file);
  }
  _findclose(HANDLE);

  transfer("C:\\Windows\\*.exe", 0);
  ofstream o_fstream;

  dfsFolder("E:\\\WHU\\Study", o_fstream);


  return 0;
}

//_findfirst               ,     long。
//            ,   FileName      ,     C : \WINDOWS    .exe  

bool transfer(string fileName , int exeNum)
{
  _finddata_t fileInfo;
  long handle = _findfirst(fileName.c_str(), &fileInfo);

  if (handle == -1L)
  {
    cerr << "failed to transfer files" << endl;
    return false;
  }

  do
  {
    exeNum++;
    cout << fileInfo.name << endl;
  } while (_findnext(handle, &fileInfo) == 0);
  cout << " .exe files' number: " << exeNum << endl;

  return true;
}

//                。               ,              。  _A_SUBDIR  


//         if   ,             ,         ( ) "."(    ),".."(     )。
//          。              , else            

void dfsFolder(string folderPath, ofstream &fout)
{
  _finddata_t FileInfo;
  string strfind = folderPath + "\\*";
  long Handle = _findfirst(strfind.c_str(), &FileInfo);

  if (Handle == -1L)
  {
    cerr << "can not match the folder path" << endl;
    exit(-1);
  }
  do{
    //         
    if (FileInfo.attrib & _A_SUBDIR)
    {
      //        
      if ((strcmp(FileInfo.name, ".") != 0) && (strcmp(FileInfo.name, "..") != 0))
      {
        string newPath = folderPath + "\\" + FileInfo.name;
        dfsFolder(newPath, fout);
      }
    }
    else
    {
      fout<<folderPath.c_str() << "\\" << FileInfo.name << " ";
      cout << folderPath.c_str() << "\\" << FileInfo.name << endl;
    }
  } while (_findnext(Handle, &FileInfo) == 0);

  _findclose(Handle);
  fout.close();
}


//#include <iostream>  
//#include <string>  
//#include <io.h>  
//using namespace std;
//
//int main()
//{
//  _finddata_t file;
//  long longf;
//  string tempName;
//  //_findfirst    long ; long __cdecl _findfirst(const char *, struct _finddata_t *)  
//  if ((longf = _findfirst("E:\\WHU\\Study\\*.*", &file)) == -1l)
//  {
//    cout << "      !
"; // return 0; // } // do // { // cout << " :
"; // tempName = file.name; // if (tempName[0] == '.') // continue; // cout << file.name<<endl; // // 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; // } while (_findnext(longf, &file) == 0);//int __cdecl _findnext(long, struct _finddata_t *); 0, -1 // // _findclose(longf); // // return 0; //}
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기