zoukankan      html  css  js  c++  java
  • 文件夹操作-创建/删除/重命名/复制文件夹

    前言

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

    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

  • 相关阅读:
    确认端口占用
    [转]自建Syncthing中继服务器(私密传输或造福大众)
    【转】Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置
    【转】搭建和配置Syncthing发现和中继服务器
    【转】Syncthing的安装与使用
    pycrypto安装出错的问题 intmax_t C:Program Files (x86)Windows Kits10include10.0.10240.0ucrtinttypes.
    Git从库中移除已删除大文件
    词云图
    [转].NET 性能测试工具 -- 事件跟踪器(ETW)
    [转]ANTS Performance Profiler和ANTS Memory Profiler 使用
  • 原文地址:https://www.cnblogs.com/happyamyhope/p/6593896.html
Copyright © 2011-2022 走看看