最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Lua中實(shí)現(xiàn)遞歸刪除一個(gè)文件夾

 更新時(shí)間:2015年01月13日 09:08:15   投稿:junjie  
這篇文章主要介紹了Lua中實(shí)現(xiàn)遞歸刪除一個(gè)文件夾,本文給出了使用C++和使用純LUA兩種方式實(shí)現(xiàn),需要的朋友可以參考下

在使用 quick-cocos2d-x 做項(xiàng)目熱更新的時(shí)候,我需要建立臨時(shí)文件夾以保存下載的更新包。在更新完成后,我需要?jiǎng)h除這些臨時(shí)文件和文件夾。

cocos2d-x 和 quick-cocos2d-x 都沒(méi)有提供刪除文件夾功能。我做了如下2個(gè)嘗試:

1. 使用C++

在 cocos2d-x 2.x 中的 AssetsManager 包中提供了一個(gè) CreateDirectory 方法。這個(gè)方法可以跨平臺(tái)支持創(chuàng)建文件夾。在實(shí)際項(xiàng)目中運(yùn)行沒(méi)有問(wèn)題。

復(fù)制代碼 代碼如下:

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 范例中提供了一個(gè) reset 方法,這個(gè)方法使用系統(tǒng)命令遞歸刪除文件夾。
復(fù)制代碼 代碼如下:

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();
}


但是,這個(gè) reset 在 ios 模擬器中運(yùn)行的時(shí)候,xcode會(huì)報(bào)這樣的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.

因此,我轉(zhuǎn)而考慮另一個(gè)方案。

2. 純lua

純 lua 其實(shí)是個(gè)噱頭。這里還是要依賴(lài) lfs(lua file sytem),好在 quick-cocos2d-x 已經(jīng)包含了這個(gè)庫(kù)。

lfs.rmdir 命令 和 os.remove 命令一樣,只能刪除空文件夾。因此實(shí)現(xiàn)類(lèi)似 rm -rf 的功能, 必須要遞歸刪除文件夾中所有的文件和子文件夾。

讓我們擴(kuò)展一下 os 包。

復(fù)制代碼 代碼如下:

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 真機(jī)上測(cè)試成功。Windows系統(tǒng)、Mac OSX 以及 iOS 真機(jī)還沒(méi)有測(cè)試。我測(cè)試后會(huì)立即更新。

相關(guān)文章

  • 分析Lua觀(guān)察者模式最佳實(shí)踐之構(gòu)建事件分發(fā)系統(tǒng)

    分析Lua觀(guān)察者模式最佳實(shí)踐之構(gòu)建事件分發(fā)系統(tǒng)

    當(dāng)對(duì)象間存在一對(duì)多關(guān)系時(shí),則使用觀(guān)察者模式(Observer Pattern)。比如,當(dāng)一個(gè)對(duì)象被修改時(shí),則會(huì)自動(dòng)通知依賴(lài)它的對(duì)象。觀(guān)察者模式屬于行為型模式
    2021-06-06
  • Lua中實(shí)現(xiàn)遞歸刪除一個(gè)文件夾

    Lua中實(shí)現(xiàn)遞歸刪除一個(gè)文件夾

    這篇文章主要介紹了Lua中實(shí)現(xiàn)遞歸刪除一個(gè)文件夾,本文給出了使用C++和使用純LUA兩種方式實(shí)現(xiàn),需要的朋友可以參考下
    2015-01-01
  • C++遍歷Lua table的方法實(shí)例

    C++遍歷Lua table的方法實(shí)例

    這篇文章主要介紹了C++遍歷Lua table的方法實(shí)例,本文給出了Lua table數(shù)據(jù)格式、C++實(shí)現(xiàn)的遍歷代碼以及輸出效果,需要的朋友可以參考下
    2015-04-04
  • Lua中os庫(kù)詳細(xì)介紹

    Lua中os庫(kù)詳細(xì)介紹

    這篇文章主要介紹了Lua中os庫(kù)詳細(xì)介紹,本文詳細(xì)講解了OS庫(kù)中的常用方法,分別對(duì)參數(shù)做出了解釋,有的給出了示例,需要的朋友可以參考下
    2014-11-11
  • Lua字符串庫(kù)(string庫(kù))學(xué)習(xí)筆記

    Lua字符串庫(kù)(string庫(kù))學(xué)習(xí)筆記

    這篇文章主要介紹了Lua字符串庫(kù)(string庫(kù))學(xué)習(xí)筆記,本文列舉了一些常用的Lua字符串庫(kù)函數(shù),如byte、char、dump、find等,需要的朋友可以參考下
    2014-12-12
  • Lua中的閉包學(xué)習(xí)筆記

    Lua中的閉包學(xué)習(xí)筆記

    這篇文章主要介紹了Lua中的閉包學(xué)習(xí)筆記,閉包是可以包含自由(未綁定到特定對(duì)象)變量的代碼塊;這些變量不是在這個(gè)代碼塊內(nèi)或者任何全局上下文中定義的,而是在定義代碼塊的環(huán)境中定義(局部變量),需要的朋友可以參考下
    2014-12-12
  • Lua 學(xué)習(xí)筆記之C API 遍歷 Table實(shí)現(xiàn)代碼

    Lua 學(xué)習(xí)筆記之C API 遍歷 Table實(shí)現(xiàn)代碼

    這篇文章主要介紹了Lua 學(xué)習(xí)筆記之C API 遍歷 Table實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2014-12-12
  • Lua中操作字符串的基本方法整理

    Lua中操作字符串的基本方法整理

    這篇文章主要介紹了Lua中操作字符串的基本方法整理,是Lua入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • Lua讀取和寫(xiě)入文件處理例子

    Lua讀取和寫(xiě)入文件處理例子

    這篇文章主要介紹了Lua讀取和寫(xiě)入文件處理,本文直接給出實(shí)例代碼,需要的朋友可以參考下
    2014-11-11
  • Lua中的迭代器和泛型for介紹

    Lua中的迭代器和泛型for介紹

    這篇文章主要介紹了Lua中的迭代器和泛型for介紹,任何一種結(jié)構(gòu),只要允許你遍歷集合中所有元素的都可稱(chēng)之為迭代器,本文就講解了Lua中迭代器的相關(guān)知識(shí)和代碼實(shí)例,并講解了泛型for的語(yǔ)法,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

封丘县| 夏邑县| 德江县| 潮安县| 略阳县| 瓦房店市| 大竹县| 城固县| 蓬安县| 黄浦区| 永城市| 兴化市| 珲春市| 南通市| 延吉市| 教育| 托克托县| 长治县| 抚宁县| 轮台县| 兴海县| 连州市| 固镇县| 同江市| 平山县| 南丹县| 尚义县| 通江县| 库伦旗| 灌阳县| 东海县| 泸州市| 湖州市| 息烽县| 和林格尔县| 江源县| 隆昌县| 宝坻区| 临高县| 土默特右旗| 清苑县|