• 文件夹操作-创建/删除/重命名/复制文件夹


    前言

    项目进行过程中遇到一些文件夹相关操作,本文主要是删除指定目录。

    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个结尾*/
        ZeroMemory(tczFolder, (MAX_PATH + 1)*sizeof(TCHAR));
        _tcscpy(tczFolder, pstrFolder);
        tczFolder[iPathLen] = _T('');
        tczFolder[iPathLen + 1] = _T('');
    
        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个结尾
        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");//源文件夹的路径,以""即空为结尾
        fop.pTo = _T(".\savepic");//拷入文件的文件夹路径,以""即空为结尾
        SHFileOperation(&fop);
    
        //重命名当前文件夹
        //系统当前时间
        t = time(NULL);
        strftime(now, sizeof(now), "%Y%m%dT%H%M%S", localtime(&t));
        sprintf(newname, ".\savepic\savepic_%s", now);
        rename(".\savepic\pic", 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;
    
    }
    View Code

  • 相关阅读:
    Python那些优雅的写法:switch-case
    python将print输出的信息保留到日志文件中
    Python 获取被调用函数名称,所处模块,被调用代码行
    python **运算符及多参数传参
    使用Docker之镜像的拉取、查询、删除
    资料
    kmp算法
    开源软件
    golang之http请求的dns解析代码流程
    Go语言从HTTP请求中获取服务端IP地址
  • 原文地址:https://www.cnblogs.com/happyamyhope/p/6593896.html
Copyright © 2020-2023  润新知