在网上找了好多windows底下C++代码如何复制文件夹,删除文件夹,但是大多数都是需要输入绝对路径。为了工程需要,工程底下需要输入相对路径,故自己研究了几个函数,可以直接使用。该代码在windows10+visual studio 2017底下测试是成功的,代码如下:
void getFiles(string& dataPath, vector<string>& files)
{
long long hFile = 0;
struct _finddata_t fileinfo;
string p;
int i = 0;
if ((hFile = _findfirst(p.assign(dataPath).append("/*").c_str(), &fileinfo)) != -1)
{
do
{
if ((fileinfo.attrib & _A_SUBDIR))
continue;
else
files.push_back(p.assign(dataPath).append("/").append(fileinfo.name));
} while (_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
}
void RemoveDir(string& dirPath) //删除文件夹,输入string字符串类型的相对路径
{
vector<string> dirFileList;
getFiles(dirPath, dirFileList); //读取所有文件
while (!dirFileList.empty())
{
string fileName = dirFileList.back(); //从后往前删除
DeleteFile(fileName.c_str()); //一个个删除子文件
dirFileList.pop_back();
}
RemoveDirectory(dirPath.c_str()); //删除文件夹,空文件夹才能用这个函数删除
}
void CopyDir(string& oriPath, string& destPath) //复制文件夹底下的子文件,同样输入相对路径
{
vector<string> dirFileList;
getFiles(oriPath, dirFileList);
while (!dirFileList.empty())
{
string fileName = dirFileList.back(); //从后往前复制
size_t Position = fileName.find_last_of('/');
string prefixName = fileName.substr(Position, fileName.size()); //读取子文件的文件名
CopyFile(fileName.c_str(), (destPath+ prefixName).c_str(),false);
dirFileList.pop_back();
}
}
代码所需头文件啥的,可以到时候缺啥再补啥,有三个肯定需要包含:<io.h>,<string>,<vector>。我这里代码写的是删除、复制单个文件夹底下的文件,如果文件夹底下有嵌套文件夹可以在函数里面加一层循环嵌套即可。