前言
项目进行过程中遇到一些文件夹相关操作,本文主要是删除指定目录。
c++代码如下:
/************************************************************************ * Copyright(c) 2016 ZRJ * All rights reserved. * * File: main.cpp * Brief: copy/rename/delete/mkdir Folder * Version: 1.0 * Author: ZRJ * Email: happyamyhope@163.com * Date: 2016/12/08 * History: * 20161208:复制/重命名/删除/重建文件夹; ************************************************************************/ //头文件 #include <stdio.h> #include <iostream> #include "Windows.h" //获取系统时间 #include <time.h> //复制文件夹并重命名 #include <io.h>//_access函数 #include <direct.h>//mkdir #include "Shellapi.h" #include "tchar.h" //#include "shlwapi.h" #pragma comment(lib,"shell32.lib") //告诉编译器在编译形成的.obj文件和.exe文件中添加一条信息,使得连链接器在链接库时去直接找shell32.lib这个库,不要去找别的库; //----------------------------------------- //调参 time_t t; char now[64]; SHFILEOPSTRUCT fop; //----------------------------------------- //函数声明 BOOL SHDeleteFolder(LPCTSTR pstrFolder);//删除指定目录 void CopyFolder(SHFILEOPSTRUCT fop);//复制文件夹到另一个文件夹路径并重命名该文件夹,删除目录并重建 void CreateFolder(char* filename);//不存在则创建文件夹; //----------------------------------------- //函数定义 //删除指定目录 BOOL SHDeleteFolder(LPCTSTR pstrFolder) { //int iPathLen = _tcslen(pstrFolder); size_t iPathLen = _tcslen(pstrFolder); TCHAR tczFolder[MAX_PATH + 1]; SHFILEOPSTRUCT FileOp; if ((NULL == pstrFolder)) { return FALSE; } if (iPathLen >= MAX_PATH) { return FALSE; } /*确保目录的路径以2个\0结尾*/ ZeroMemory(tczFolder, (MAX_PATH + 1)*sizeof(TCHAR)); _tcscpy(tczFolder, pstrFolder); tczFolder[iPathLen] = _T('\0'); tczFolder[iPathLen + 1] = _T('\0'); ZeroMemory(&FileOp, sizeof(SHFILEOPSTRUCT)); FileOp.fFlags |= FOF_SILENT; //不显示进度 FileOp.fFlags |= FOF_NOERRORUI; //不报告错误信息 FileOp.fFlags |= FOF_NOCONFIRMATION; //直接删除,不进行确认 FileOp.hNameMappings = NULL; FileOp.hwnd = NULL; FileOp.lpszProgressTitle = NULL; FileOp.wFunc = FO_DELETE; FileOp.pFrom = tczFolder; //要删除的目录,必须以2个\0结尾 FileOp.pTo = NULL; FileOp.fFlags &= ~FOF_ALLOWUNDO; //直接删除,不放入回收站 /*删除目录*/ if (0 == SHFileOperation(&FileOp)) { return TRUE; } else { return FALSE; } } //复制文件夹到另一个文件夹路径并重命名该文件夹 void CopyFolder(SHFILEOPSTRUCT fop) { fop.wFunc = FO_COPY; char newname[100]; //复制当前文件夹到另一个文件夹 fop.pFrom = _T(".\\pic\0");//源文件夹的路径,以"\0"即空为结尾 fop.pTo = _T(".\\savepic\0");//拷入文件的文件夹路径,以"\0"即空为结尾 SHFileOperation(&fop); //重命名当前文件夹 //系统当前时间 t = time(NULL); strftime(now, sizeof(now), "%Y%m%dT%H%M%S", localtime(&t)); sprintf(newname, ".\\savepic\\savepic_%s\0", now); rename(".\\savepic\\pic\0", newname); //删除文件夹并重新创建 SHDeleteFolder(".\\pic"); _mkdir(".\\pic"); return; } //不存在则创建文件夹; void CreateFolder(char* filename) { char* tag; for (tag = filename; *tag; tag++) { if (*tag == '\\') { char buf[1000], path[1000]; strcpy(buf, filename); buf[strlen(filename) - strlen(tag) + 1] = NULL; strcpy(path, buf); if (_access(path, 0) == -1)//如果文件具有指定的访问权限,则函数返回0;如果文件不存在或者不能访问指定的权限,则返回-1;mode为6表示读写权限; { _mkdir(path); //创建成功返回0 不成功返回-1; } } } return ; } void main() { //CopyFolder(fop); char* file = ".\\pic\\"; CreateFolder(file); return; }
完