麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > 綜合 > 正文

Lua中實現遞歸刪除一個文件夾

2024-07-21 23:04:23
字體:
來源:轉載
供稿:網友

在使用 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 真機還沒有測試。我測試后會立即更新。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 污黄视频在线播放 | 亚洲五码在线观看视频 | 一二区成人影院电影网 | xxxxhd18hd日本hd| 久久91精品国产91久久yfo | 久草在线网址 | 4p嗯啊巨肉寝室调教男男视频 | 久久成人综合网 | 久久在线免费视频 | 亚洲性综合网 | 毛片118极品美女写真 | 欧美韩国一区 | 国产午夜精品久久久久 | 亚洲欧美国产高清va在线播放 | 国产精选在线 | 人禽l交免费视频观看 视频 | 日本成人在线免费 | 91av久久| 精品一区二区三区网站 | 免费国产一级淫片 | 欧美日本日韩 | 中国老女人一级毛片视频 | 国产成人精品一区在线播放 | 国产影视 | 91色一区二区三区 | 欧美久久一区二区 | 黄色免费影片 | 97伦理| 综合毛片 | 国产精品久久久久一区二区 | 中国女警察一级毛片视频 | 欧美日韩亚州综合 | 99最新地址 | 成人在线视频黄色 | 久久久久久久久免费 | 98国内自拍在线视频 | 在线小视频国产 | 日韩毛片免费观看 | 免费看综艺策驰影院 | 全黄裸片武则天一级第4季 偿还电影免费看 | 免费观看视频在线观看 |