import fs = require("fs"); import path = require("path"); export namespace FileUtil{ /** 遍历文件夹(返回是否是文件夹) */ export function walkDir(url:string,onFile?:Function,onDir?:Function,thisObj?:any):boolean { url = path.normalize(url); var stats = fs.statSync(url); if (stats.isDirectory()) { if(onDir) onDir.call(thisObj,url); var files = fs.readdirSync(url); for (var i = 0, len = files.length; i < len; i++) { walkDir(path.join(url,files[i]),onFile,onDir,thisObj); } return true; } else { if(onFile) onFile.call(thisObj,url); return false; } } /** * 创建文件夹 * @param dir 文件夹路径 * @returns 是否创建成功 */ // 创建文件夹 export function mkdirSync(url:string) { url = path.normalize(url); if (!fs.existsSync(url)) { mkdirSync(path.dirname(url)); fs.mkdirSync(url); } } /** 删除文件或文件夹 */ /** 删除文件或文件夹 */ export function rmdirSync(url) { var files = []; if (fs.existsSync(url)) { files = fs.readdirSync(url); files.forEach(function(file, index) { var subUrl = path.join(url, file); if (fs.statSync(subUrl).isDirectory()) { // recurse rmdirSync(subUrl); } else { // delete file fs.unlinkSync(subUrl); } }); fs.rmdirSync(url); } } /** * 复制文件或文件夹 * @param fromUrl 源文件夹 * @param toUrl 目标文件夹 * @param suff 文件后缀名, 空表示不过滤文件后缀名, 多个可用 "|" 分隔 * @param subfolder 是否获取子文件夹 * @param ignoreFile 用于自定义来判断是否需要忽略指定的文件或文件夹 */ export function copyDir(fromUrl, toUrl) { fromUrl = path.normalize(fromUrl); toUrl = path.normalize(toUrl); walkDir(fromUrl, function(fileUrl){ fs.writeFileSync(fileUrl.replace(fromUrl,toUrl),fs.readFileSync(fileUrl)); },function(dicUrl:string){ mkdirSync(dicUrl.replace(fromUrl,toUrl)); }); } /** 返回文件完整名 */ export function filename(url:string):string { return path.normalize(path.join(path.dirname(url),path.basename(url,path.extname(url)))); } /** 字符串全局替换 */ export function replace(str:string,strA,strB):string { while(str.indexOf(strA) >= 0) { str = str.replace(strA,strB); } return str; } }