c_cpp 文件管理,用于获取某一目录下的所有文件名称等.FileBrower用于获取文件夹下的名称列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 文件管理,用于获取某一目录下的所有文件名称等.FileBrower用于获取文件夹下的名称列表相关的知识,希望对你有一定的参考价值。

/*!
 * @file      FileBrower.h
 * @brief     C++ header for the get the list of names under a folder
 * @author    Qingfeng.Li
 * copyright  reserved 2014, please do not remove this head
 */
#ifndef _CPPLIB_FILEBROWER_H_
#define _CPPLIB_FILEBROWER_H_
#include <vector>
#include <string>

/**
 * @class FileBrower
 *
 * @brief 用于封装关于目录及文件的一些基本操作
 */
class FileBrower
{
public:

	/**
	 * @brief 获取当前的工作目录
	 *
	 * @return 当前工作目录
	 */
	static std::string getcwd();

	/**
	 * @brief 获取当前目录下所有目录的名称(注意包含了"."与"..",磁盘根目录除外)
	 *
	 * @param[out] floderList 返回目录序列
	 * @return 返回是否成功
	 */
	static bool getFolderList(std::vector<std::string> &folderList);

	/**
	 * @brief 获取当前目录下所有文件的名称
	 *
	 * @param[out] fileList 当前目录下所有的文件名称序列
	 * @return 是否获取成功
	 */
	static bool getFileList(std::vector<std::string> &fileList);

	/**
	 * @brief 获取当前目录下所有目录以及文件的名称(注意包含了"."与"..",磁盘根目录除外)
	 * 
	 * @param[out] allList 当前目录下所有目录以及文件的名称
	 * @return 返回是否获取成功	 
	 */
	static bool getNameList(std::vector<std::string> &allList);

	/**
	 * @brief 改变当前的工作目录
	 *
	 * @param[in] dir 需要改变到的工作目录
	 * @return 返回是否改变成功
	 */
	static bool chdir(const std::string &dir);

	/**
	 * @brief 递归的获取该目录下的所有文件名称
	 * @param[out] fileList 当前目录下所有的文件名称序列(包括子目录中的文件名称,但注意不包含目录名)
	 * @return 是否获取成功
	 */
	static bool getFileListRecursion(std::vector<std::string> &fileList);
};
#endif // _CPPLIB_FILEBROWER_H_
#include "FileBrower.h"
#include <io.h>
#include <direct.h>

std::string FileBrower::getcwd()
{
	char cwd[_MAX_PATH];
	_getcwd(cwd, _MAX_PATH);
	return cwd;
}


bool FileBrower::getFolderList(std::vector<std::string> &folderList)
{
	_finddata_t filedata;
	intptr_t findHandle;
	findHandle = _findfirst("*", &filedata);
	if (findHandle == -1)
	{
		return false;//没有寻找到,直接返回
	}
	do
	{
		//判断是否是目录
		if (filedata.attrib & _A_SUBDIR)
		{
			folderList.push_back(filedata.name);
		}
	} while (0 == _findnext(findHandle, &filedata));
	_findclose(findHandle);
	return true;
}


bool FileBrower::getFileList(std::vector<std::string> &fileList)
{
	_finddata_t filedata;
	intptr_t findHandle;
	findHandle = _findfirst("*", &filedata);
	if (findHandle == -1)
	{
		return false;//没有寻找到,直接返回
	}
	do
	{
		//判断是否为目录
		if (!(filedata.attrib & _A_SUBDIR))
		{
			fileList.push_back(filedata.name);
		}
	} while (0 == _findnext(findHandle, &filedata));
	_findclose(findHandle);
	return true;
}


bool FileBrower::getNameList(std::vector<std::string> & allList)
{
	_finddata_t filedata;
	intptr_t findHandle;
	findHandle = _findfirst("*", &filedata);
	if (findHandle == -1)
	{
		return false;//没有寻找到,直接返回
	}
	do
	{
		allList.push_back(filedata.name);
	} while (0 == _findnext(findHandle, &filedata));
	_findclose(findHandle);
	return true;
}


bool FileBrower::chdir(const std::string & dir)
{
  return _chdir(dir.c_str()) == 0 ? true : false;
}


bool FileBrower::getFileListRecursion(std::vector<std::string> & fileList)
{
	//获取这个路径下的所有目录及文件名称
	_finddata_t filedata;
	intptr_t findHandle;
	findHandle = _findfirst("*", &filedata);
	if (findHandle == -1)
	{
		return false;//没有寻找到,直接返回
	}
	do
	{
		//判断是否是目录
		if (filedata.attrib & _A_SUBDIR)
		{
			//dir.push_back(filedata.name);
			if (strcmp(filedata.name, ".") && strcmp(filedata.name, ".."))
			{
				if (0 == _chdir(filedata.name))//打开成功
				{
					getFileListRecursion(fileList);	//递归调用
					_chdir("..");
				}
			}
		}
		else
		{
			fileList.push_back(filedata.name);
		}

	} while (0 == _findnext(findHandle, &filedata));
	_findclose(findHandle);
	return true;
}

以上是关于c_cpp 文件管理,用于获取某一目录下的所有文件名称等.FileBrower用于获取文件夹下的名称列表的主要内容,如果未能解决你的问题,请参考以下文章

计算某一路径下的所有目录或是文件数量

如何将hdfs里某一目录下的所有文件的文件名读取出来

用python读取一个文件夹下的所有CSV文件里某一列数据中最大值,将此最大值所在行截取到新CSV文件中?

C语言怎么读取某一文件夹下的所有文件夹和文件?

文件权限的获取,cmd命令:Takeown

Linux常用磁盘管理命令详解