/** * 遍历目录中所有文件 */ import * as walk from "walk"; import * as fs from "fs"; import * as path from "path"; export function listFiles(folder: string) { let files: string[] = []; // throw new Error("some thing went wrong"); walk.walkSync(folder, { listeners: { file: (root, fileStats, next) => { let filePath = (root + "/" + fileStats.name).replace(/\\/g, "/"); files.push(filePath) next(); } } }); return files; } export function joinFile(folder, file) { if (folder.substring(folder.length - 1) === "/") { return `${folder.substring(0, folder.length - 1)}/${file}` } return `${folder}/${file}` } // 读取文件列表 export function readFileList(filepath) { if (!fs.existsSync(filepath)) { // 如果不存在就直接创建? // mkdirsSync(filepath); console.log("不存在filepath:", filepath, ) return false; } let files = fs.readdirSync(filepath); // files为文件名数组,如[ 'ex书籍.zip', 'secretSkin.png', 'shatan_preview.png' ] let fileList = []; files.forEach((val, index) => { var fPath = path.join(filepath, val); // fPath为文件数组中某个文件的路径 var stats = fs.statSync(fPath); // stats为文件数组中某个文件的各种信息 if (stats.isFile()) { fileList.push({ name: val, size: stats.size }); }; }) return fileList; } export function readFolderList(filepath: string) { if (!fs.existsSync(filepath)) { return []; } let folders = []; let files = fs.readdirSync(filepath); files.forEach((val, index) => { var fPath = path.join(filepath, val); var stats = fs.statSync(fPath); if (stats.isDirectory()) { folders.push({ folderName: val }) }; }); return folders; } export function getFileName(path) { var pos1 = path.lastIndexOf('/'); var pos2 = path.lastIndexOf('\\'); var pos = Math.max(pos1, pos2) if (pos < 0) return path; else return path.substring(pos + 1); } export function createFolderAndSaveFile(file: string, data: any) { createFolder(path.dirname(file)); fs.writeFileSync(file, data); } export function createFolder(folder: string) { var paths = folder.match(/[^\/]+/g); if (!paths || paths.length === 0) { return false; } if(folder[0]=="/"){ paths[0] = "/"+paths[0]; } var curPath = []; var len = paths.length; for (var i = 0; i < len; ++i) { curPath.push(paths[i]); var pathName = curPath.join("/"); if (!fs.existsSync(pathName)) { fs.mkdirSync(pathName); } } return true; } export function mkdirsSync(dirname) { if (fs.existsSync(dirname)) { return true; } else { if (mkdirsSync(path.dirname(dirname))) { fs.mkdirSync(dirname); return true; } } } export function removeFolder(folder: string) { if (!fs.existsSync(folder)) { return; } let names = fs.readdirSync(folder); for (let i = 0; i < names.length; ++i) { let name = `${folder}/${names[i]}`; if (fs.statSync(name).isDirectory()) { removeFolder(name); } else { fs.unlinkSync(name); } } fs.rmdirSync(folder); } export function removeFiles(folder: string, files: string[]) { if (!fs.existsSync(folder)) { return; } for (let i = 0; i < files.length; ++i) { let name = joinFile(folder, files[i]); if (fs.statSync(name).isDirectory()) { removeFolder(name); } else { fs.unlinkSync(name); } } } export function copyTo(srcFile: string, dstFile: string) { createFolder(path.dirname(dstFile)); fs.copyFileSync(srcFile, dstFile); } export function readFolder(folder: string, exclude?: string[]) { let folders: string[] = []; let names = fs.readdirSync(folder); for (let i = 0; i < names.length; ++i) { let name = `${folder}/${names[i]}`; if (fs.statSync(name).isDirectory()) { if (exclude && exclude.indexOf(names[i]) !== -1) { continue; } folders.push(name); } } return folders; } export const DefaultExcludeFolders = [".svn", ".git", ".DS_Store"];