获取程序所在目录&列举目录下文件和文件夹--C++实现

话不多说, 直接上代码

CommonFunc.h

#pragma once
#include <direct.h>
using namespace std;

//枚举指定路径下文件,c++方法
void listFiles(char* dir, vector<char*>& vecSzFilename);
//枚举指定路径下文件夹,c++方法
void listDir(char* dir, vector<char*>& vecSzDir);
//获取程序所在文件夹,c++方法
int getWorkDir(char* szProgramPath);

CommonFunc.cpp文件

#include "CommonFunc.h"
//获取当前程序绝对路径
int getWorkDir(char* szProgramPath)
{
	char szPath[_MAX_PATH] = { 0 };
	char szDrive[_MAX_DRIVE] = { 0 };
	char szDir[_MAX_DIR] = { 0 };
	char szFname[_MAX_FNAME] = { 0 };
	char szExt[_MAX_EXT] = { 0 };

	GetModuleFileNameA(NULL, szPath, sizeof(szPath));
	//ZeroMemory(szProgramPath, strlen(szProgramPath));
	_splitpath_s(szPath, szDrive, szDir, szFname, szExt);
	sprintf_s(szProgramPath, _MAX_PATH, "%s%s", szDrive, szDir);

	return 0;
}
//枚举指定路径下文件名, 保存到vector中
void listFiles(char * dir, vector<char*>& vecSzFilename)
{
	char szDir[_MAX_PATH] = { 0 };
	sprintf_s(szDir, _MAX_PATH, "%s%s", dir, "*.*");			
	intptr_t handle;
	_finddata_t findData;

	handle = _findfirst(szDir, &findData); 
	if (handle == -1)
	{
		cout << "Failed to find first file!\n";
		return;
	}

	do
	{
		if (findData.attrib & _A_SUBDIR
			|| strcmp(findData.name, ".") == 0
			|| strcmp(findData.name, "..") == 0
			)    
		{
			//cout << findData.name << "\t<dir>\n";
		}
		else
		{
			//cout << findData.name << "\t" << findData.size << endl;
			char* pBuffer = new char[_MAX_PATH]();
			sprintf_s(pBuffer, _MAX_PATH, "%s%s", dir, findData.name);
			vecSzFilename.push_back(pBuffer);
		}
	} while (_findnext(handle, &findData) == 0);    

	//cout << "Done!\n";
	_findclose(handle);    // ¹Ø±ÕËÑË÷¾ä±ú
}
//枚举指定路径下文件夹, 保存到vector中
void listDir(char * dir, vector<char*>& vecSzDir)
{
	char szDir[_MAX_PATH] = { 0 };
	sprintf_s(szDir, _MAX_PATH, "%s%s", dir, "*.*");			
	intptr_t handle;
	_finddata_t findData;

	handle = _findfirst(szDir, &findData);    
	if (handle == -1)
	{
		cout << "Failed to find first file!\n";
		return;
	}
	do
	{
		if (findData.attrib & _A_SUBDIR && 
			strcmp(findData.name, ".") != 0 &&
			strcmp(findData.name, "..") != 0)
		{
			cout << findData.name << "\t<dir>\n";
			char* pBuffer = new char[_MAX_PATH]();
			sprintf_s(pBuffer, _MAX_PATH, "%s%s%s", dir, findData.name, "\\");
			vecSzDir.push_back(pBuffer);
		}
		else
		{
			////cout << findData.name << "\t" << findData.size << endl;
			//char* pBuffer = new char[_MAX_PATH]();
			//sprintf_s(pBuffer, _MAX_PATH, "%s%s", dir, findData.name);
			//vecSzFilename.push_back(pBuffer);
		}
	} while (_findnext(handle, &findData) == 0);    
	_findclose(handle);    // ¹Ø±ÕËÑË÷¾ä±ú
}

猜你喜欢

转载自blog.csdn.net/LuffysMan/article/details/86353702