添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

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

inline bool isSpecialDir(const char *path)
	return strcmp(path, "..") == 0 || strcmp(path, ".") == 0;
bool moveDir(const _tstring& srcPath, const _tstring& dstPath)
#ifdef _UNICODE
	std::string pathBak = ws2s(addSlashIfNeeded(srcPath));
#else
	std::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 _UNICODE
				moveDir(s2ws(sCurDirFile), s2ws(stSubDstPath));
#else
				moveDir(sCurDirFile, stSubDstPath);
#endif // _UNICODE
				_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;

欢迎交流与讨论。

不想使用系统接口函数,而更偏爱使用c++,网上找了一圈,竟然没有,于是这里实现,虽然麻烦一点但是可以使用。关键代码,部分获取名称的函数需要另外实现。inline bool isSpecialDir(const char *path){ return strcmp(path, "..") == 0 || strcmp(path, ".") == 0;}bool moveDir(const _tstring& srcPath, const _tstring& dstPath)
文件文件夹操作1.创建文件夹2.创建文件3.删除文件4.删除文件夹5.删除一个目录下所有的文件夹6.清空文件夹7.读取文件8.写入文件9.写入随机文件10.读取文件属性11.写入属性12.枚举一个文件夹中的所有文件夹13.复制文件夹14.复制一个文件夹下所有的文件夹到另一个文件夹下15.移动文件夹16.移动一个文件夹下所有的文件夹到另一个目录下17.以一个文件夹的框架在另一个目录创建文件夹和空文件18.复制文件19.复制一个文件夹下所有的文件到另一个目录20.提取扩展名21.提取文件名22.提取文件路径2
虽然c++学的很菜,但是还是得想办法用起来。这里我们将某一个目录下的所有图片文件移动到自己指定的另一个目录下,同理移动其他类型的文件可以更改一下文件后缀即可。 笔者将整个过程分成了两步:收集目录下的满足后缀条件的文件路径和移动文件到目标路径下。这里用的是标准库filesystem,代码也比较简单。
initgraph(1440, 768); //创建一个窗口,大小设定为背景大小,以免图片拉伸变形 IMAGE background; //创建一个图像,命名为background loadimage(&background, "bac
在使用 `rename()` 函数修改文件夹名字时,如果文件夹当前正在被其他程序或者进程占用,就会出现文件夹被打开的情况。这时候可以考虑使用系统相关的 API 来进行操作,例如在 Windows 平台下可以使用 `MoveFileEx()` 函数来实现文件夹的重命名。具体的代码实现可以参考以下示例: ```c++ #include <windows.h> int main() { const wchar_t* oldname = L"C:\\oldname"; const wchar_t* newname = L"C:\\newname"; if (MoveFileEx(oldname, newname, MOVEFILE_REPLACE_EXISTING)) { // 文件夹重命名成功 } else { // 文件夹重命名失败 return 0; 在上述代码中,`MoveFileEx()` 函数的第三个参数可以指定一些额外的标志来控制文件夹移动方式,例如 `MOVEFILE_REPLACE_EXISTING` 表示如果新文件夹已经存在,则覆盖原文件夹。同时注意到在 Windows 平台下,文件名需要使用 `wchar_t` 类型,因此需要在字符串前加上 `L` 前缀。