自己写的几个关于文件夹操作的函数

自己写了几个关于文件夹操作的函数,代码如下:

/////////////////////////////////////////
//     删除目录及子目录下所有文件         //
/////////////////////////////////////////

BOOL DeleteAllFileFromDirectoryW(LPCWSTR lpPath)
{
    HANDLE hFind;
    WCHAR wzDeletePath[MAX_PATH] = { 0 };
    WIN32_FIND_DATA findFileData;

    ZeroMemory(&findFileData, sizeof(WIN32_FIND_DATA));

    //切换到要删除的路径
    //
    _wchdir(lpPath);

    //检查路径是否以“\”结尾
    //
    wcscpy_s(wzDeletePath, MAX_PATH, lpPath);
    if (L‘\\‘ != wzDeletePath[wcslen(wzDeletePath) - 1])
    {
        wcscat_s(wzDeletePath, MAX_PATH, L"\\");
    }

    //在路径后面添加通配符“*.*”
    //
    wcscat_s(wzDeletePath, MAX_PATH, L"*.*");

    //寻找第一个文件
    //
    hFind = FindFirstFileW(wzDeletePath, &findFileData);
    if (INVALID_HANDLE_VALUE == hFind)
    {
        //错误提示,路径不存在
        return FALSE;
    }

    //开始遍历
    //
    do
    {
        wcscpy_s(wzDeletePath, MAX_PATH, lpPath);
        wcscat_s(wzDeletePath, MAX_PATH, L"\\");
        wcscat_s(wzDeletePath, MAX_PATH, findFileData.cFileName);

        //如果是目录,过滤掉“.”和“..”目录,递归遍历
        //
        if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            if ((0 == wcscmp(L".", findFileData.cFileName)) || (0 == wcscmp(L"..", findFileData.cFileName)))
            {
                continue;
            }

            //递归遍历
            DeleteAllFileFromDirectoryW(wzDeletePath);
        }
        //文件,直接删除
        //
        else
        {
            if (!DeleteFileW(wzDeletePath))
            {
                //错误输出,删除文件失败
                continue;
            }
        }

    } while (FindNextFileW(hFind, &findFileData));

    FindClose(hFind);

    //文件夹遍历完毕后切换到父文件夹,删除此文件夹
    //
    _wchdir(L"..");
    if (!RemoveDirectoryW(lpPath))
    {
        //错误输出,删除文件夹失败
        return FALSE;
    }

    return TRUE;
}

///////////////////////////////////////////
//    目录拷贝(目录下包含子目录)        ////
///////////////////////////////////////////

BOOL CopyDirectoryW(LPCWSTR lpSrcDir, LPCWSTR lpDesDir)
{
    HANDLE hFind;
    WCHAR wzSrcDir[MAX_PATH] = { 0 };
    WCHAR wzDesDir[MAX_PATH] = { 0 };
    WCHAR wzTemp[MAX_PATH] = { 0 };
    WIN32_FIND_DATA findFileData;

    ZeroMemory(&findFileData, sizeof(WIN32_FIND_DATA));

    //检查路径是否以“\”结尾
    //
    wcscpy_s(wzSrcDir, MAX_PATH, lpSrcDir);
    if (L‘\\‘ != wzSrcDir[wcslen(wzSrcDir) - 1])
    {
        wcscat_s(wzSrcDir, MAX_PATH, L"\\");
    }

    //在路径后面添加通配符“*.*”
    //
    wcscat_s(wzSrcDir, MAX_PATH, L"*.*");

    //寻找第一个文件
    //
    hFind = FindFirstFileW(wzSrcDir, &findFileData);
    if (INVALID_HANDLE_VALUE == hFind)
    {
        //错误提示,路径不存在
        return FALSE;
    }

    //开始遍历
    //
    do
    {
        wcscpy_s(wzSrcDir, MAX_PATH, lpSrcDir);
        wcscat_s(wzSrcDir, MAX_PATH, L"\\");
        wcscat_s(wzSrcDir, MAX_PATH, findFileData.cFileName);

        wcscpy_s(wzDesDir, MAX_PATH, lpDesDir);
        wcscat_s(wzDesDir, MAX_PATH, L"\\");
        wcscat_s(wzDesDir, MAX_PATH, findFileData.cFileName);

        //如果是目录,过滤掉“.”和“..”目录,递归遍历
        //
        if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            if ((0 == wcscmp(L".", findFileData.cFileName)) || (0 == wcscmp(L"..", findFileData.cFileName)))
            {
                continue;
            }

            //创建目标目录
            if (!PathFileExistsW(wzDesDir))
            {
                if (!CreateDirectoryW(wzDesDir, NULL))
                {
                    //错误输出,创建目录失败
                    continue;
                }
            }
            //递归遍历
            CopyDirectoryW(wzSrcDir, wzDesDir);
        }
        //文件,直接拷贝
        //
        else
        {
            if (!CopyFileW(wzSrcDir, wzDesDir, TRUE))
            {
                //错误输出,拷贝文件失败
                continue;
            }
        }

    } while (FindNextFileW(hFind, &findFileData));

    FindClose(hFind);

    return TRUE;
}

////////////////////////////////////////
//    目录移动(目录下包含子目录)     ////
/////////////////////////////// ////////

BOOL MoveDirectoryW(LPCWSTR lpSrcDir, LPCWSTR lpDesDir)
{
    HANDLE hFind;
    WCHAR wzSrcDir[MAX_PATH] = { 0 };
    WCHAR wzDesDir[MAX_PATH] = { 0 };
    WCHAR wzTemp[MAX_PATH] = { 0 };
    WIN32_FIND_DATA findFileData;

    ZeroMemory(&findFileData, sizeof(WIN32_FIND_DATA));

    //切换到要移动的路径
    //
    _wchdir(lpSrcDir);

    //检查路径是否以“\”结尾
    //
    wcscpy_s(wzSrcDir, MAX_PATH, lpSrcDir);
    if (L‘\\‘ != wzSrcDir[wcslen(wzSrcDir) - 1])
    {
        wcscat_s(wzSrcDir, MAX_PATH, L"\\");
    }

    //在路径后面添加通配符“*.*”
    //
    wcscat_s(wzSrcDir, MAX_PATH, L"*.*");

    //寻找第一个文件
    //
    hFind = FindFirstFileW(wzSrcDir, &findFileData);
    if (INVALID_HANDLE_VALUE == hFind)
    {
        //错误提示,路径不存在
        return FALSE;
    }

    //开始遍历
    //
    do
    {
        wcscpy_s(wzSrcDir, MAX_PATH, lpSrcDir);
        wcscat_s(wzSrcDir, MAX_PATH, L"\\");
        wcscat_s(wzSrcDir, MAX_PATH, findFileData.cFileName);

        wcscpy_s(wzDesDir, MAX_PATH, lpDesDir);
        wcscat_s(wzDesDir, MAX_PATH, L"\\");
        wcscat_s(wzDesDir, MAX_PATH, findFileData.cFileName);

        //如果是目录,过滤掉“.”和“..”目录,递归遍历
        //
        if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            if ((0 == wcscmp(L".", findFileData.cFileName)) || (0 == wcscmp(L"..", findFileData.cFileName)))
            {
                continue;
            }

            //创建目标目录
            if (!PathFileExistsW(wzDesDir))
            {
                if (!CreateDirectoryW(wzDesDir, NULL))
                {
                    //错误输出,创建目录失败
                    continue;
                }
            }
            //递归遍历
            MoveDirectoryW(wzSrcDir, wzDesDir);
        }
        //文件,直接移动
        //
        else
        {
            if (!MoveFileW(wzSrcDir, wzDesDir))
            {
                //错误输出,移动文件失败
                continue;
            }
        }

    } while (FindNextFileW(hFind, &findFileData));

    FindClose(hFind);

    //文件夹遍历完毕后切换到父文件夹,删除此文件夹
    //
    _wchdir(L"..");
    if (!RemoveDirectoryW(lpSrcDir))
    {
        //错误输出,删除文件夹失败
        return FALSE;
    }
    return TRUE;
}
时间: 2024-10-13 16:19:37

自己写的几个关于文件夹操作的函数的相关文章

几个文件夹操作的函数

/** * 返回格式化的文件大小 * @param string $byte * @return string */ function transBytes($byte){ $arrar=array("B","KB","MB","GB","TB","PB"); $i=0; while(($byte/1024)>1){ $byte=$byte/1024; $i++; } return

C#文件夹操作之Directory类和DirectoryInfo类

问题的由来 怎么样使用 Cocos2d-x 快速开发游戏,方法很简单,你可以看看其自带的例程,或者从网上搜索教程,运行起第一个HelloWorld,然后在 HelloWorld 里面写相关逻辑代码,添加我们的层.精灵等 ~ 我们并不一定需要知道 Cocos2d-x 是如何运行或者在各种平台之上运行,也不用知道 Cocos2d-x 的游戏是如何运行起来的,它又是如何渲染界面的 ~~~ 两个入口 程序入口的概念是相对的,AppDelegate 作为跨平台程序入口,在这之上做了另一层的封装,封装了不同

linux 下文件及文件夹操作常用命令

文件及文件夹操作 1.创建文件夹 " mkdir 文件夹名 " 这样就会在当前目录创建一个文件夹. 2.复制文件 cp 3.剪切 mv 编辑文件内容 vi 或vim 一般来说vi是基本功能,vim比vi功能强大一些. 一些基本的操作是 打开或新新文件   vi 文件路径 打开时是只读模式,要写编辑先输入一个i 这时就是插入模式 就可以录入你想录的信息了. 当录完后,可以保存退出,方法是 先按"ESC"退出插入模式,然后 输入 :wq  然后回车,就保存退出了. 也可

iOS开发——Swift篇&文件,文件夹操作

文件,文件夹操作 ios开发经常会遇到读文件,写文件等,对文件和文件夹的操作,这时就可以使用NSFileManager,NSFileHandle等类来实现. 下面总结了各种常用的操作: 1,遍历一个目录下的所有文件 1 //假设用户文档下有如下文件和文件夹[test1.txt,fold1/test2.txt] 2 let manager = NSFileManager.defaultManager() 3 let urlForDocument = manager.URLsForDirectory

文件及文件夹操作(打开关闭创建流)

文件及文件夹操作:一.流:文件流:FileStream.用来操作文件.命名空间:System.IO;使用流的步骤:——最原生的流的操作.——通用性最强的.1.创建流.FileStream fs = new FileStream("文件路径",FileMode枚举); FileMode.Appen - 如果存在,就打开追加:如果不存就新建 FileMode.Create - 如果存在,覆盖.如果不存在就新建. FileMode.OpenOrCreate.如果存在就打开,不存在就新建.2.

【AFL(三)】afl-tmin修改:添加文件夹操作指令

前言: 之前分析tmin工具的时候,提到tmin的命令目前只能对文件进行操作,很多博客也提供了写脚本的方式对文件夹进行操作.本文是想通过修改tmin源代码的方式,实现添加新命令参数就可以对文件夹进行操作. 本文分为三部分:主要思路.部分实现细节.演示. 在文章最后给出了git地址,可以pull下来直接替换afl-tmin.c用. 主要思路: [一]分析源码 在main函数入口之前,有几个自变量.函数需要仔细查看: 1. 自变量 static u8 *in_file, /* Minimizer i

linux —— 学习笔记(文件、文件夹操作)

目录:1.常用的文件文件夹操作 2.文件属性的设置 1.常用的文件文件夹操作 mkdir  创建文件夹 -p 如果指定 a/b/c 时 a .b 不存在,一起创建出来 cp       复制文件或文件夹 -r 复制文件夹 rmdir   删除空的文件夹 -p 类似于mkdir 沿途为空则一起删除 rm       删除文件或文件夹 -rf 递归静默删除 mv      移动文件(重命名)       如果目标和源 目录未改变,则移动的效果为重命名 2.文件属性的设置 chmod  改变文件的mo

c# 封装的文件夹操作类之复制文件夹

c#  封装的文件夹操作类之复制文件夹 一.复制文件夹原理: 1.递归遍历文件夹 2.复制文件 二.FolderHelper.cs 1 /// <summary> 2 /// 文件夹操作类 3 /// </summary> 4 public static class FolderHelper 5 { 6 /// <summary> 7 /// 复制文件夹 8 /// </summary> 9 /// <param name="sourceFo

文件及文件夹操作

文件及文件夹操作: C/S:WinForm可以操作客户端文件 Client ServerB/S:Brower Server 命名空间:using system .IO; 1. File类: 创建:File.Create(路径);创建文件,返回FileStream FileStream fs = File.Create(路径):之后需要关闭否则打不开,fs.close(); 删除:File.Delete(路径);无返回值 复制文件:File.Copy(源文件,目标文件); 剪切文件:File.Mo