C++이용findfirst 와findnext 파일 찾 는 방법
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;
//}
총결산이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
hdu 1717 소수 화 점수 2 (수학)소수 화 점수 2 레이 는 수학 시간 에 선생님 의 말씀 을 듣 고 모든 소수 가 점수 로 표시 되 는 형식 이 라 고 말 했다. 그 는 녹 기 시 작 했 고 곧 완성 되 었 다. 그러나 그 는 또 하나의 문 제 를...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.