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

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

 更新時(shí)間:2015年05月27日 09:27:41   投稿:junjie  
這篇文章主要介紹了Lua腳本實(shí)現(xiàn)遞歸刪除一個(gè)文件夾,本文給出了C++和Lua兩個(gè)版本的實(shí)現(xiàn)代碼,需要的朋友可以參考下

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

rmdir in quick-cocos2d-x with lua.

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

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

1. 使用C++

在 cocos2d-x 2.x 中的 AssetsManager 包中提供了一個(gè) CreateDirectory 方法。這個(gè)方法可以跨平臺(tái)支持創(chuàng)建文件夾。在實(shí)際項(xiàng)目中運(yù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è)噱頭。這里還是要依賴 lfs(lua file sytem),好在 quick-cocos2d-x 已經(jīng)包含了這個(gè)庫。

lfs.rmdir 命令 和 os.remove 命令一樣,只能刪除空文件夾。因此實(shí)現(xiàn)類似 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ī)上測試成功。Windows系統(tǒng)、Mac OSX 以及 iOS 真機(jī)還沒有測試。我測試后會(huì)立即更新。

相關(guān)文章

  • Lua常用時(shí)間函數(shù)使用實(shí)例

    Lua常用時(shí)間函數(shù)使用實(shí)例

    這篇文章主要介紹了Lua常用時(shí)間函數(shù)使用實(shí)例,本文直接給出使用代碼實(shí)例,并附有詳細(xì)注釋,要用到哪個(gè)復(fù)制即可,需要的朋友可以參考下
    2015-04-04
  • Lua中全局變量與非全局環(huán)境介紹

    Lua中全局變量與非全局環(huán)境介紹

    這篇文章主要介紹了Lua中全局變量與非全局環(huán)境介紹,本文講解了全局變量的原形、非全局的環(huán)境、改變函數(shù)的全局變量環(huán)境、使用__index元方法保留原來的_G,需要的朋友可以參考下
    2014-09-09
  • C++中調(diào)用Lua配置文件和響應(yīng)函數(shù)示例

    C++中調(diào)用Lua配置文件和響應(yīng)函數(shù)示例

    這篇文章主要介紹了C++中調(diào)用Lua配置文件和響應(yīng)函數(shù)示例,本文使用Lua文件作為配置文件,并寫了幾個(gè)響應(yīng)函數(shù)以便在C++中使用,需要的朋友可以參考下
    2015-07-07
  • Lua腳本獲取喜馬拉雅MP3音頻地址

    Lua腳本獲取喜馬拉雅MP3音頻地址

    這篇文章主要介紹了Lua腳本獲取喜馬拉雅MP3音頻地址,本文直接給出代碼實(shí)例,需要的朋友可以參考下
    2015-04-04
  • ubuntu 14.04下熟悉lua的語法

    ubuntu 14.04下熟悉lua的語法

    擺在本人目前來說最大的困難就是迅速熟悉Lua語言,后續(xù)的一切工作才有可能,所以必須現(xiàn)在電腦上安裝好Lua開發(fā)環(huán)境,之后program with Lua,我們先來熟悉下lua的語法吧。
    2015-04-04
  • Lua流程控制語句if else的使用示例

    Lua流程控制語句if else的使用示例

    今天小編就為大家分享一篇關(guān)于Lua流程控制語句if else的使用示例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Lua中函數(shù)與面向?qū)ο缶幊痰幕A(chǔ)知識(shí)整理

    Lua中函數(shù)與面向?qū)ο缶幊痰幕A(chǔ)知識(shí)整理

    函數(shù)在面對(duì)對(duì)象的編程中又被叫做方法,會(huì)受到作用域的制約,Lua中具有類等面向?qū)ο蟮奶匦?接下來我們就來看一下Lua中函數(shù)與面向?qū)ο缶幊痰幕A(chǔ)知識(shí)整理
    2016-06-06
  • lua日志文件處理代碼

    lua日志文件處理代碼

    本文給大家分享的是使用lua編寫的日志文件的處理代碼,非常的簡單實(shí)用,有需要的小伙伴可以參考下。
    2015-09-09
  • Lua中的迭代器淺析

    Lua中的迭代器淺析

    這篇文章主要介紹了Lua中的迭代器淺析,本文先是講解了什么是迭代器,然后給出了自己寫一個(gè)迭代器的示例,最后介紹了迭代器的調(diào)用方法,需要的朋友可以參考下
    2014-09-09
  • OpenResty中正則模式匹配的2種方法詳解

    OpenResty中正則模式匹配的2種方法詳解

    在 OpenResty 中,同時(shí)存在兩套正則表達(dá)式規(guī)范:Lua 語言的規(guī)范和 Nginx 的規(guī)范,下面這篇文章主要給大家介紹了關(guān)于OpenResty中正則模式匹配的2種方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2018-04-04

最新評(píng)論

隆昌县| 木兰县| 宕昌县| 蓬莱市| 兴义市| 克山县| 格尔木市| 太保市| 长海县| 建昌县| 桃源县| 开封县| 星子县| 五河县| 梓潼县| 体育| 苍南县| 五寨县| 随州市| 油尖旺区| 浮山县| 成安县| 台山市| 东乌珠穆沁旗| 松阳县| 石楼县| 崇州市| 扎鲁特旗| 弥渡县| 夹江县| 韩城市| 铜川市| 容城县| 建宁县| 余干县| 满城县| 临猗县| 东宁县| 防城港市| 前郭尔| 蒙城县|