当前位置: 首页 > 编程笔记 >

Lua中实现递归删除一个文件夹

吴和硕
2023-03-14
本文向大家介绍Lua中实现递归删除一个文件夹,包括了Lua中实现递归删除一个文件夹的使用技巧和注意事项,需要的朋友参考一下

在使用 quick-cocos2d-x 做项目热更新的时候,我需要建立临时文件夹以保存下载的更新包。在更新完成后,我需要删除这些临时文件和文件夹。

cocos2d-x 和 quick-cocos2d-x 都没有提供删除文件夹功能。我做了如下2个尝试:

1. 使用C++

在 cocos2d-x 2.x 中的 AssetsManager 包中提供了一个 CreateDirectory 方法。这个方法可以跨平台支持创建文件夹。在实际项目中运行没有问题。


bool AssetsManager::createDirectory(const char *path)

{

#if (CC_TARGET_PLATFORM != CC_PLATFORM_WIN32)

    mode_t processMask = umask(0);

    int ret = mkdir(path, S_IRWXU | S_IRWXG | S_IRWXO);

    umask(processMask);

    if (ret != 0 && (errno != EEXIST))

    {

        return false;

    }

    return true; #else     BOOL ret = CreateDirectoryA(path, NULL); if (!ret && ERROR_ALREADY_EXISTS != GetLastError()) { return false; }     return true; #endif }


在 cocos2d-x 2.x 的 AssetsManager sample 范例中提供了一个 reset 方法,这个方法使用系统命令递归删除文件夹。

void UpdateLayer::reset(cocos2d::CCObject *pSender)

{

    pProgressLabel->setString(" ");

    // Remove downloaded files #if (CC_TARGET_PLATFORM != CC_PLATFORM_WIN32)     string command = "rm -r ";     // Path may include space.     command += "\"" + pathToSave + "\"";     system(command.c_str()); #else     string command = "rd /s /q ";     // Path may include space.     command += "\"" + pathToSave + "\"";     system(command.c_str()); #endif     // Delete recorded version codes.     getAssetsManager()->deleteVersion();

    createDownloadedDir(); }


但是,这个 reset 在 ios 模拟器中运行的时候,xcode会报这样的warinng:

The iOS Simulator libSystem was initialized out of order. This is most often caused by running host executables or inserting host dylibs. In the future, this will cause an abort.

因此,我转而考虑另一个方案。

2. 纯lua

纯 lua 其实是个噱头。这里还是要依赖 lfs(lua file sytem),好在 quick-cocos2d-x 已经包含了这个库。

lfs.rmdir 命令 和 os.remove 命令一样,只能删除空文件夹。因此实现类似 rm -rf 的功能, 必须要递归删除文件夹中所有的文件和子文件夹。

让我们扩展一下 os 包。


require("lfs")

function os.exists(path)     return CCFileUtils:sharedFileUtils():isFileExist(path) end

function os.mkdir(path)     if not os.exists(path) then         return lfs.mkdir(path)     end     return true end

function os.rmdir(path)     print("os.rmdir:", path)     if os.exists(path) then         local function _rmdir(path)             local iter, dir_obj = lfs.dir(path)             while true do                 local dir = iter(dir_obj)                 if dir == nil then break end                 if dir ~= "." and dir ~= ".." then                     local curDir = path..dir                     local mode = lfs.attributes(curDir, "mode")                     if mode == "directory" then                         _rmdir(curDir.."/")                     elseif mode == "file" then                         os.remove(curDir)                     end                 end             end             local succ, des = os.remove(path)             if des then print(des) end             return succ         end         _rmdir(path)     end     return true end


上面的代码在 iOS 模拟器和 Android 真机上测试成功。Windows系统、Mac OSX 以及 iOS 真机还没有测试。我测试后会立即更新。

 类似资料:
  • 本文向大家介绍Python实现递归遍历文件夹并删除文件,包括了Python实现递归遍历文件夹并删除文件的使用技巧和注意事项,需要的朋友参考一下 思路: 遍历文件夹下面的文件夹 如果文件夹名称等于".svn",则修改文件夹的属性(因为".svn"的文件都是只读的,你不能直接删除) 删除此文件夹 如果文件夹名称不等于".svn",则递归上面的方法 Python的实现 代码 要点: Walk在os模块下

  • 本文向大家介绍Shell脚本实现递归删除空文件夹,包括了Shell脚本实现递归删除空文件夹的使用技巧和注意事项,需要的朋友参考一下 有时我们需要递归删除空文件夹,网上找了一下,没有发现比较好的Shell脚本,于是自己动手写了一个 脚本 脚本的内容很简单,就是遍历目录,找出空文件夹,然后删除。 使用 假如脚本文件为dedr.sh,我们测试的文件结构为: 运行脚本: 删除的文件: 结果: 我们可以看到

  • 问题内容: 我在删除空目录时遇到问题。这是我的代码: 参数是我要传递需要完成工作的目录的位置。该目录如下所示: 请注意,以上所有文件夹均为空。当我运行该脚本的文件夹,单独被删除!但是,文件夹,并不会被删除,即使它们是空文件夹。 编辑: 我得到的例外是: 我在哪里弄错了? 问题答案: 尝试:

  • 本文向大家介绍C++递归删除一个目录实例,包括了C++递归删除一个目录实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C++递归删除一个目录的实现方法。分享给大家供大家参考。具体方法如下: CFindFile的使用框架如下: 递归删除代码如下: 希望本文所述对大家的C++程序设计有所帮助。

  • 本文向大家介绍java利用递归算法实现对文件夹的删除功能,包括了java利用递归算法实现对文件夹的删除功能的使用技巧和注意事项,需要的朋友参考一下 前提: 集成开发环境(IDE):eclipse jdk版本:8.0 File类的几个方法: 1)isFile() 测试此抽象路径名表示的文件是否为普通文件。 2)list() 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。 3)del

  • 本文向大家介绍php7基于递归实现删除空文件夹的方法示例,包括了php7基于递归实现删除空文件夹的方法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php7基于递归实现删除空文件夹的方法。分享给大家供大家参考,具体如下: php版本7.0.4 代码如下: 更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP目录操作技巧汇总》、《php文件操作总结》、《PHP常用遍历算法与技巧总