{"_id":"1811a-utils-3","_rev":"1-2c99af41fc6276512e69968e6613b0b1","name":"1811a-utils-3","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"1811a-utils-3","version":"1.0.0","description":"```javascript\r const fs = require(\"fs\");","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"keywords":[],"author":"","license":"ISC","_id":"1811a-utils-3@1.0.0","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","dist":{"integrity":"sha512-8inZAwGbHG3ygqHwJ5WkjMd3iEFjNwPL8ij4Xflzqn9vO+HIsrhvuQ/A05hUc0KC3+ZoGAJm/d1mB5smdYz+kg==","shasum":"13e9b9455ee321e41c4b6a21ec13df66aebfc3fe","tarball":"https://registry.npmjs.org/1811a-utils-3/-/1811a-utils-3-1.0.0.tgz","fileCount":3,"unpackedSize":5133,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/WJdCRA9TVsSAnZWagAA8dIP/38kXduRQQgiNJ6+ACoj\n+ellaor7MKQokEg8FT7XpzJ7l9GvmWKVnZvQFy8e+RMSFJ8Rx9AQp4WpGqAV\nfJtUIfcUFcisFrm0cDLjC6t39+QCPUjpFxnJ/YAEpuRd2EfFN6XKxlVpKvxe\nsBWAcDBO3MAZFzy7CiRslkZIqiur5NlzmGLVwnjodMBkKdtW5tiaQqNZOuAV\noBviaq6+NSk3kz2h2DQOYvRnqb3v32vl9V7jOwh8LaLiQpQgVresYqRvIhMD\nz0Y0fA/xxrcB9GQbxYEtQ/KFcWfXCA6Ce52YKfRhy/7zODl3uekQPx+JZFOx\nARHzUUd4VPsFF42Xb9OGuqfs11ff02MB/OOhfWlbexdME1FsP9B7zczG1c7e\nrQd88l9j5GFT7xOZYPYJ5xq/0br+GpvfJAmE/8BOJqJieYmT0dRPP1fUeSjP\nhUCWoTemtutP/R+Ckfq2ZSSDfX4QWggAFz6ZoMbK1HHFk2sWx5Z/8VOVywgW\nmyoZL2exjzPq73DGaIz4NdgsZE17U7PmbCqeY8Q9o5tLrB1q7ecPioT/x7b4\noqc80UENSxvIbmV6G4y+iMO5GEQpZqiIm+Z7TaEKPbS7GJFzPEaaASpgQtbh\nP4W0r8GWF4uV6I73Ysq5uImLXi9o4dVZZG8bYgdHZjLOBCc9Bd85vOyIHMxp\niTKP\r\n=WyYh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAq0iZZCDdGG8NbpixeBPo8l6PF/SzXIAUSNNhencxNRAiEA9L4Jbxf3tDncaauqFjtqpMwmonSqlL3ARMqU8bZV9IY="}]},"_npmUser":{"name":"qwe896673315","email":"m15284308939@163.com"},"directories":{},"maintainers":[{"name":"qwe896673315","email":"m15284308939@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/1811a-utils-3_1.0.0_1610441309039_0.2570243461490287"},"_hasShrinkwrap":false}},"time":{"created":"2021-01-12T08:48:29.039Z","1.0.0":"2021-01-12T08:48:29.138Z","modified":"2022-04-04T10:12:00.187Z"},"maintainers":[{"name":"qwe896673315","email":"m15284308939@163.com"}],"description":"```javascript\r const fs = require(\"fs\");","keywords":[],"license":"ISC","readme":"# 复制文件夹\r\n```javascript\r\nconst fs = require(\"fs\");\r\n\r\n\r\nfunction copyDir(source, target) {\r\n    if (!fs.existsSync(target)) {\r\n        // 1.创建目标目录\r\n        fs.mkdirSync(target);\r\n    }\r\n\r\n    // 2.读取源文件夹子目录\r\n    let arr = fs.readdirSync(source)\r\n    // 3.遍历每一个子目录\r\n    arr.forEach(v => {\r\n        // 拼接路径\r\n        let midSource = source + \"/\" + v\r\n        let midTarget = target + \"/\" + v\r\n        if (fs.statSync(midSource).isFile()) {\r\n            // 是文件\r\n            fs.copyFileSync(midSource, midTarget)\r\n        } else {\r\n            // 是文件夹\r\n            copyDir(midSource, midTarget)\r\n        }\r\n    })\r\n}\r\n\r\n\r\n\r\ncopyDir(\"demo\", \"demo1\")\r\n```\r\n\r\n# 删除文件夹\r\n```javascript\r\nconst fs = require(\"fs\");\r\n// 算法实现： 删除非空文件夹\r\n\r\n\r\nfunction removeDir(dir) {\r\n    // 1.获取文件夹的子目录\r\n    let arr = fs.readdirSync(dir);\r\n    // 2.循环子目录\r\n    arr.forEach(v => {\r\n        // 路径拼接下\r\n        v = dir + \"/\" + v;\r\n        // 2-1 读取文件信息    \r\n        let isFile = fs.statSync(v).isFile()\r\n        // 2-2 判断是文件还是文件夹\r\n        if(isFile){\r\n            // 是文件  直接删除\r\n            fs.unlinkSync(v)\r\n        }else{\r\n            // 是文件夹  \r\n            // 递归删除文件夹\r\n            removeDir(v)\r\n        }\r\n    })\r\n    // 3.删除文件夹\r\n    fs.rmdirSync(dir);\r\n\r\n}\r\n\r\n\r\nremoveDir(\"demo\")\r\n```\r\n\r\n\r\n# 转化\r\n```javascript\r\nconst fs = require(\"fs\");\r\nconst path = require(\"path\");\r\n\r\nfunction dirToJSON(dir) {\r\n    let info = fs.statSync(dir)\r\n    if (info.isFile()) {\r\n        // 是文件\r\n        return {\r\n            // 获取路径最后一个名字\r\n            basename: path.basename(dir),\r\n            pathname: dir,\r\n            extname: path.extname(dir),\r\n            type: \"file\",\r\n            size: info.size,\r\n            content: fs.readFileSync(dir, \"utf-8\")\r\n        }\r\n    } else {\r\n        // 是文件夹\r\n        return {\r\n            pathname: dir,\r\n            type: \"dir\",\r\n            children: fs.readdirSync(dir).map(v => {\r\n                return dirToJSON(dir + \"/\" + v)\r\n            })\r\n        }\r\n\r\n    }\r\n}\r\n\r\n\r\n\r\n// let o = dirToJSON(\"demo\");\r\n// fs.writeFileSync(\"data.json\", JSON.stringify(o))\r\n\r\n\r\nfunction JSONToDir(obj) {\r\n    if (obj.type === \"dir\") {\r\n        // 是文件夹\r\n        fs.mkdirSync(obj.pathname);\r\n        obj.children.forEach(item => {\r\n            JSONToDir(item)\r\n        })\r\n    } else {\r\n        // 是文件\r\n        fs.writeFileSync(obj.pathname, obj.content)\r\n    }\r\n}\r\n\r\n// let o = JSON.parse(fs.readFileSync(\"data.json\"));\r\n// JSONToDir(o)\r\n```","readmeFilename":"README.md"}