c++에서 windows api 를 사용 하여 지정 한 폴 더 와 하위 폴 더 의 파일 을 옮 겨 다 닙 니 다.

다음 코드 는 vs 2008 에서 테스트 를 통 과 했 습 니 다.FindFirst File,FindNextFile 함 수 를 이용 하여 제 컴퓨터 의 모든 경 로 를'C:\\Users\\\v'로 옮 겨 다 녔 습 니 다.tianboli\\데스크 톱\\windows 프로그램 디자인 개발 안내 폴 더 를 출력 하고 폴 더 및 하위 폴 더 의 모든 파일 의 전체 경 로 를 콘 솔 로 출력 합 니 다.전체 코드 는 다음 과 같 습 니 다:

#include "stdafx.h"
#include <iostream>
#include "windows.h"
#include <string.h>
#include <Strsafe.h>
using namespace std;
 
//           ,        
void TraverseDirectory(wchar_t Dir[MAX_PATH])    
{
	WIN32_FIND_DATA FindFileData;
	HANDLE hFind=INVALID_HANDLE_VALUE;
	wchar_t DirSpec[MAX_PATH];                  //            
	DWORD dwError;
	StringCchCopy(DirSpec,MAX_PATH,Dir);
        StringCchCat(DirSpec,MAX_PATH,TEXT("\\*"));   //              \*
 
	hFind=FindFirstFile(DirSpec,&FindFileData);          //            
 
	if(hFind==INVALID_HANDLE_VALUE)                               //  hFind      ,      
	{
		FindClose(hFind); 
		return;  
	}
	else 
	{
		while(FindNextFile(hFind,&FindFileData)!=0)                            //           
		{
			if((FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)!=0&&wcscmp(FindFileData.cFileName,L".")==0||wcscmp(FindFileData.cFileName,L"..")==0)        //      &&   "."||   "."
			{
				 continue;
			}
			if((FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)!=0)      //        
			{
				wchar_t DirAdd[MAX_PATH];
				StringCchCopy(DirAdd,MAX_PATH,Dir);
				StringCchCat(DirAdd,MAX_PATH,TEXT("\\"));
				StringCchCat(DirAdd,MAX_PATH,FindFileData.cFileName);       //             
				TraverseDirectory(DirAdd);                                  //      
			}
			if((FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)==0)    //       
			{
				wcout<<Dir<<"\\"<<FindFileData.cFileName<<endl;            //      
			}
		}
		FindClose(hFind);
	}
}
 
int _tmain( int argc, wchar_t *argv[ ], wchar_t *envp[ ] )
{
	locale loc( "chs" );                //      ,  wchar             
	wcout.imbue( loc );
	
 
	TraverseDirectory(L"C:\\Users\\v_tianboli\\Desktop\\windows        ");         //        ,              
	system("pause");
	return 0;
}
상기 코드 가 내 컴퓨터 에서 실 행 된 결 과 는 다음 과 같다.

다음은 다른 사람의 보충 이다.
C++어떤 폴 더 아래 의 하위 폴 더 와 모든 파일 을 읽 습 니 다.
_findnext 는 64 비트 시스템 에서 실 패 했 습 니 다.해결 방법 은//파일 핸들 long hFile=0 입 니 다.intptr 로 써 야 합 니 다.t hFile

// TestForOnlyC++.cpp :              。
//

#include "stdafx.h"

#include <fstream>
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include<io.h>
using namespace std;
void getAllFiles(string path, vector<string>& files)
{
	//      
	long   hFile = 0;
	//      
	struct _finddata_t fileinfo;  //            
	string p;  //string            :assign(),       
	if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)
	{
		do
		{
			if ((fileinfo.attrib &  _A_SUBDIR))  //        
			{
				if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
				{
					files.push_back(p.assign(path).append("/").append(fileinfo.name));//       
					getAllFiles(p.assign(path).append("/").append(fileinfo.name), files);//       
				}
			}
			else    //    
			{
				files.push_back(p.assign(path).append("/").append(fileinfo.name));//   
			}
		} while (_findnext(hFile, &fileinfo) == 0);  //     ,    0,  -1
		_findclose(hFile);
	}
}
//  
int main()
{
	string DATA_DIR = "E:/wangwy/GY/dataForGY/  3/  3";
	vector<string> files;
	//  
	char * DistAll = "AllFiles.txt";
	getAllFiles(DATA_DIR, files);//              
	//ofstream ofn(DistAll);  //     
	int size = files.size();
	int  FaiNum = 0;
	//ofn << size << endl;
	cout<< size << endl;
	for (int i = 0; i<size; i++)
	{
		//ofn << files[i] << endl;
		cout << files[i] << endl;
	}
	//ofn.close();
	return 0;
}
c++에서 windows api 를 사용 하여 지정 한 폴 더 와 하위 폴 더 에 있 는 파일 을 옮 겨 다 니 는 글 을 소개 합 니 다.더 많은 c+windows api 가 지정 한 폴 더 내용 을 옮 겨 다 니 고 있 습 니 다.이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 바 랍 니 다!

좋은 웹페이지 즐겨찾기