当前位置: 代码迷 >> 综合 >> c++实现移动文件夹到指定文件夹
  详细解决方案

c++实现移动文件夹到指定文件夹

热度:52   发布时间:2024-02-22 03:52:45.0

不想使用系统接口函数,而更偏爱使用c++,网上找了一圈,竟然没有,于是这里实现,虽然麻烦一点但是可以使用。

关键代码,部分获取名称的函数需要另外实现。

inline bool isSpecialDir(const char *path)
{return strcmp(path, "..") == 0 || strcmp(path, ".") == 0;
}bool moveDir(const _tstring& srcPath, const _tstring& dstPath)
{
#ifdef _UNICODEstd::string pathBak = ws2s(addSlashIfNeeded(srcPath));
#elsestd::string pathBak = CStdStr::AddSlashIfNeeded(srcPath);
#endif // _UNICODE_finddata_t fileinfo;intptr_t hFile;std::string p;if((hFile = _findfirst(p.assign(pathBak).append("*.*").c_str(), &fileinfo)) != -1){while(_findnext(hFile, &fileinfo) == 0){if(isSpecialDir(fileinfo.name))continue;std::string sCurDirFile = p.assign(pathBak).append(fileinfo.name);if( fileinfo.attrib & _A_SUBDIR ){_tstring stSubDstPath = CStdStr::AddSlashIfNeeded(dstPath) + CStdStr::GetNameOfDir(srcPath);//如果是目录,开始递归删除目录中的内容
#ifdef _UNICODEmoveDir(s2ws(sCurDirFile), s2ws(stSubDstPath));
#elsemoveDir(sCurDirFile, stSubDstPath);
#endif // _UNICODE}else{_tstring strSubDstFile = CStdStr::AddSlashIfNeeded(dstPath) + sCurDirFile.substr(CStdStr::AddSlashIfNeeded(CStdStr::GetDirOfDir(pathBak)).length());_tstring strSubDir = CStdStr::GetDirOfFile(strSubDstFile);_tstring stCurDstFile = CStdStr::AddSlashIfNeeded(strSubDir) + CStdStr::GetNameOfFile(sCurDirFile);if (!CStdDir::IfAccessDir(strSubDir) && !CStdDir::CreateDir(strSubDir)){continue;}if(rename(sCurDirFile.c_str(), stCurDstFile.c_str()) == -1){//showError(fileinfo.name);return false;}}}_findclose(hFile);//关闭打开的文件句柄,并释放关联资源,否则无法删除空目录}//删除空目录,必须在递归返回前调用_findclose,否则无法删除目录if(_rmdir(pathBak.c_str()) == -1){//showError();//目录非空则会显示出错原因return false;}return true;
}

欢迎交流与讨论。

  相关解决方案