国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

node 刪除和復(fù)制文件或文件夾

BoYang / 1613人閱讀

摘要:創(chuàng)建時(shí)間注意在,環(huán)境運(yùn)行無(wú)問題首先引入相關(guān)包會(huì)在使用處具體說明該包為實(shí)驗(yàn)性對(duì)文件的操作復(fù)制文件這里列出三種方式使用和結(jié)合使用使用的方法其中的同步或異步方法可酌情更改,實(shí)現(xiàn)代碼如下被復(fù)制文件的地址,相對(duì)地址放置復(fù)制文件的地址,相對(duì)地址方

[toc]

創(chuàng)建時(shí)間:2019-08-12

注意:在win10,v10.16.1 環(huán)境運(yùn)行無(wú)問題

首先引入相關(guān)包(會(huì)在使用處具體說明):

const fs = require("fs")
const path = require("path")
const child_process = require("child_process")
const fsEx = require("fs-extra")
/**
 * @des 該包為實(shí)驗(yàn)性API
 */
const fsPromises = require("fs").promises
對(duì)文件的操作 復(fù)制文件

這里列出三種方式:

使用 writeFileSync 和 readFileSync 結(jié)合

使用 copyFileSync

使用promises的copyFile方法

其中的同步或異步方法可酌情更改,實(shí)現(xiàn)代碼如下

/**
 * @param { copiedPath: String } (被復(fù)制文件的地址,相對(duì)地址)
 * @param { resultPath: String } (放置復(fù)制文件的地址,相對(duì)地址)
 */
function copyFile(copiedPath, resultPath) {
    copiedPath = path.join(__dirname, copiedPath)
    resultPath = path.join(__dirname, resultPath)

    try {
        /**
         * @des 方式一
         */
        // fs.writeFileSync(resultPath, fs.readFileSync(copiedPath))
        /**
         * @des 方式二
         */
        // fs.copyFileSync(copiedPath, resultPath)
        console.log("success");
    } catch (error) {
        console.log(error);
    }
    /**
     * @des 方式三
     */
    fsPromises.copyFile(copiedPath, resultPath)
        .then(() => {
            console.log("success");
        }).catch((err) => {
            console.log(err);
        });
}
刪除文件

使用 unlinkSync 方法,實(shí)現(xiàn)代碼如下

/**
 * @param { delPath:String } (需要?jiǎng)h除文件的地址)
 * @param { direct:Boolean } (是否需要處理地址)
 */
function deleteFile(delPath, direct) {
    delPath = direct ? delPath : path.join(__dirname, delPath)
    try {
        /**
         * @des 判斷文件或文件夾是否存在
         */
        if (fs.existsSync(delPath)) {
            fs.unlinkSync(delPath);
        } else {
            console.log("inexistence path:", delPath);
        }
    } catch (error) {
        console.log("del error", error);
    }
}
對(duì)文件夾(目錄)的操作

以下代碼有引用,復(fù)制文件相關(guān)方法

復(fù)制文件夾

使用了兩種方式:

child_process

遞歸的讀取文件和文件夾再在指定地址創(chuàng)建

實(shí)現(xiàn)代碼和釋意如下:

/**
 * @des 參數(shù)解釋同上
 */
function copyFolder(copiedPath, resultPath, direct) {
    if(!direct) {
        copiedPath = path.join(__dirname, copiedPath)
        resultPath = path.join(__dirname, resultPath)
    }

    function createDir (dirPath) {
        fs.mkdirSync(dirPath)        
    }

    if (fs.existsSync(copiedPath)) {
        createDir(resultPath)
        /**
         * @des 方式一:利用子進(jìn)程操作命令行方式
         */
        // child_process.spawn("cp", ["-r", copiedPath, resultPath])

        /**
         * @des 方式二:
         */
        const files = fs.readdirSync(copiedPath, { withFileTypes: true });
        for (let i = 0; i < files.length; i++) {
            const cf = files[i]
            const ccp = path.join(copiedPath, cf.name)
            const crp = path.join(resultPath, cf.name)  
            if (cf.isFile()) {
                /**
                 * @des 創(chuàng)建文件,使用流的形式可以讀寫大文件
                 */
                const readStream = fs.createReadStream(ccp)
                const writeStream = fs.createWriteStream(crp)
                readStream.pipe(writeStream)
            } else {
                try {
                    /**
                     * @des 判斷讀(R_OK | W_OK)寫權(quán)限
                     */
                    fs.accessSync(path.join(crp, ".."), fs.constants.W_OK)
                    copyFolder(ccp, crp, true)
                } catch (error) {
                    console.log("folder write error:", error);
                }

            }
        }
    } else {
        console.log("do not exist path: ", copiedPath);
    }
}
刪除文件夾

遞歸文件和文件夾,逐個(gè)刪除

實(shí)現(xiàn)代碼如下:

function deleteFolder(delPath) {
    delPath = path.join(__dirname, delPath)

    try {
        if (fs.existsSync(delPath)) {
            const delFn = function (address) {
                const files = fs.readdirSync(address)
                for (let i = 0; i < files.length; i++) {
                    const dirPath = path.join(address, files[i])
                    if (fs.statSync(dirPath).isDirectory()) {
                        delFn(dirPath)
                    } else {
                        deleteFile(dirPath, true)
                    }
                }
                /**
                * @des 只能刪空文件夾
                */
                fs.rmdirSync(address);
            }
            delFn(delPath);
        } else {
            console.log("do not exist: ", delPath);
        }
    } catch (error) {
        console.log("del folder error", error);
    }
}
執(zhí)行示例 目錄結(jié)構(gòu)
|- index.js(主要執(zhí)行代碼)
|- a
    |- a.txt
    |- b.txt
|- c
    |- a.txt
    |- b.txt
|- p
    |- a.txt
    |- b.txt

根據(jù)傳入的參數(shù)不同,執(zhí)行相應(yīng)的方法

/**
 * @des 獲取命令行傳遞的參數(shù)
 */
const type = process.argv[2]

function execute() {
    /**
     * @des 請(qǐng)根據(jù)不同的條件傳遞參數(shù)
     */
    if (type === "copyFile") {
        copyFile("./p/a.txt", "./c/k.txt")
    }

    if (type === "copyFolder") {
        copyFolder("./p", "./a")
    }

    if (type === "delFile") {
        deleteFile("./c/ss.txt")
    }

    if (type === "delFolder") {
        deleteFolder("./a")
    }
}

execute()
命令行傳參數(shù)
/**
 * @des 命令行傳參
 * 執(zhí)行 node ./xxx/index.js 111 222
 * 輸出:
 * 0: C:Program Files
odejs
ode.exe
 * 1: G:GitHubxxxxxxxindex.js
 * 2: 111
 * 3: 222
 */
process.argv.forEach((val, index) => {
   console.log(`${index}: ${val}`);
});
利用 fs-extra 實(shí)現(xiàn)
這是對(duì)fs相關(guān)方法的封裝,使用更簡(jiǎn)單快捷
/**
 * @des fs-extra 包實(shí)現(xiàn)
 * api參考: https://github.com/jprichardson/node-fs-extra
 */

function fsExtra() {
    async function copy() {
        try {
            await fsEx.copy(path.join(__dirname + "/p"), path.join(__dirname + "/d"))
            console.log("success");
        } catch (error) {
            console.log(error);
        }
    }

    copy()
}

可執(zhí)行源碼: https://github.com/NameHewei/node-koa/tree/master/moveFileOrFloder

歡迎交流 Github

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/106660.html

相關(guān)文章

  • JavaScript中DOM的層次節(jié)點(diǎn)(一)

    摘要:是針對(duì)和文檔的一個(gè),描繪了一個(gè)層次化的節(jié)點(diǎn)樹,允許開發(fā)人員添加修改刪除節(jié)點(diǎn)的一部分。類型級(jí)定義了接口,該接口由中的所有節(jié)點(diǎn)類型實(shí)現(xiàn)。添加的這些屬性分別對(duì)應(yīng)于每個(gè)元素中都存在的下列標(biāo)準(zhǔn)特性。 DOM是針對(duì)HTML和XML文檔的一個(gè)API,描繪了一個(gè)層次化的節(jié)點(diǎn)樹,允許開發(fā)人員添加、修改、刪除節(jié)點(diǎn)的一部分。 DOM將HTML和XML文檔描繪成一個(gè)有多個(gè)節(jié)點(diǎn)構(gòu)成的結(jié)構(gòu),節(jié)點(diǎn)分為12種不同的...

    leap_frog 評(píng)論0 收藏0
  • ES分布式架構(gòu)及底層原理

    摘要:分布式架構(gòu)原理設(shè)計(jì)的理念就是分布式搜索引擎,底層實(shí)現(xiàn)還是基于的,核心思想是在多態(tài)機(jī)器上啟動(dòng)多個(gè)進(jìn)程實(shí)例,組成一個(gè)集群。 es分布式架構(gòu)原理 elasticsearch設(shè)計(jì)的理念就是分布式搜索引擎,底層實(shí)現(xiàn)還是基于Lucene的,核心思想是在多態(tài)機(jī)器上啟動(dòng)多個(gè)es進(jìn)程實(shí)例,組成一個(gè)es集群。一下是es的幾個(gè)概念: 接近實(shí)時(shí)es是一個(gè)接近實(shí)時(shí)的搜索平臺(tái),這就意味著,從索引一個(gè)文檔直到文檔...

    Ocean 評(píng)論0 收藏0
  • 真?一行代碼完成從前端代碼build到部署線上

    在經(jīng)歷了6,7個(gè)項(xiàng)目同時(shí)開工,頻繁發(fā)布測(cè)試 ,不得不學(xué)會(huì)一點(diǎn)偷懶的小技巧來提高效率了,所以這篇文章要講的就是如何更加優(yōu)化發(fā)布流程。 工作以來,經(jīng)歷了build后,然后用FileZilla上傳服務(wù)器完成部署。再到前端打包后 ,在build倉(cāng)庫(kù)執(zhí)行g(shù)it push,后端在自動(dòng)部署。后端的自動(dòng)部署的確簡(jiǎn)化了很多操作,不過對(duì)于前端來說 ,每次發(fā)布還需要去build倉(cāng)庫(kù)執(zhí)行push操作,特別是發(fā)布頻繁的時(shí)候...

    csRyan 評(píng)論0 收藏0
  • 高程3總結(jié)#第10章DOM

    摘要:類型對(duì)象是的一個(gè)實(shí)例,表示整個(gè)頁(yè)面,而且,對(duì)象是對(duì)象的一個(gè)屬性,因此可以將其作為全局對(duì)象來訪問。刪除指定位置的行。創(chuàng)建創(chuàng)建創(chuàng)建第一行創(chuàng)建第二行將表格添加到文檔主體中 DOM 節(jié)點(diǎn)層次 Node類型 DOM1級(jí)定義了一個(gè)Node接口,該接口將由DOM中的所有節(jié)點(diǎn)類型實(shí)現(xiàn) 節(jié)點(diǎn)類型由在Node類型中定義的12個(gè)數(shù)值常量來表示,任何節(jié)點(diǎn)類型必居其一 Node.ELEMENT_NODE(...

    ARGUS 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<