import { readdirSync, statSync, exists, existsSync, readFileSync } from 'fs'; import * as Fse from 'fs-extra'; import * as path from 'path'; import ResourceComponent from './data/ResourceComponent'; import Setting from './Setting'; export default class Path { public static ReadTxt(path: string): string { return readFileSync(path,{encoding: 'utf-8'}); } public static WriteTxt(path: string, content: string) { Fse.ensureFileSync(path); Fse.writeFileSync(path,content,{encoding:'utf-8'}); // return readFileSync(path,{encoding: 'utf-8'}); } public static WriteJson(path: string, jsonString: any) { Fse.ensureFileSync(path); Fse.writeJsonSync(path,jsonString); } public static ReadXml(path: string):string { return readFileSync(path, {encoding: 'utf-8'}); } public static ReaddirSync(url: string,includeFileTypes: string[] = [],excludeFileTypes: string[] = []) { let list: string[] = []; let itemList = readdirSync(url); for(let item of itemList) { let itemPath = url + '/' + item; let stat = statSync(itemPath); if(stat.isDirectory()) { let newList = Path.ReaddirSync(itemPath,includeFileTypes,excludeFileTypes); list = list.concat(newList); } else if(stat.isFile() && item.endsWith('.xml')) { list.push(itemPath); } } return list; } public static GetDirectories(assetPath: string): string[] { let list: string[] = []; let itemList = readdirSync(assetPath); for(let packageName of itemList) { let itemPath = assetPath + '/' + packageName; let stat = statSync(itemPath); if(stat.isDirectory()) { list.push(itemPath); } } return list; } public static GetFGUIResList(resPath: string): string[]{ let list: string[] = []; let itemList = readdirSync(resPath); for(let item of itemList) { let itemPath = resPath + '/' + item; let stat = statSync(itemPath); if(stat && stat.isFile()) list.push(item); } return list; } public static Exists(path: string) { return existsSync(path); } public static CreateDirectory(path: string) { Fse.ensureDirSync(path); } public static GetDirectoryPath(path: string) { if(Path.IsFile(path)) { return path.slice(0,path.lastIndexOf('/')) } if(path.endsWith('/')) return path.slice(0,path.lastIndexOf('/')+1); return path; } public static GetFileNameWithoutExtension(name: string): string { name = name.slice(name.lastIndexOf('/')+1); return name.split('.')[0] } public static GetExtension(name: string): string { return path.extname(name); } public static IsFile(path: string) { if(!Fse.pathExistsSync(path)) return false let stat = statSync(path); return stat && stat.isFile(); } public static IsDirectory(path: string) { if(!Fse.pathExistsSync(path)) return false let stat = statSync(path); return stat && stat.isDirectory(); } public static CheckPath( p:string, isFile = true) { if(isFile) { p = path.dirname(p); } if(!Fse.existsSync(p)) { Fse.mkdirSync(p, {recursive: true}) } } public static GetImportParams(res: ResourceComponent, isExtend:boolean = false): string[] { let cls = isExtend?res.classNameExtend:res.classNameStruct; let folder = isExtend ? "Extends" : "Generates"; return [cls,`../../${folder}/${res.packageName}/${cls}`]; } // 删除文件或者目录 public static Delete(srcPath) { var fs = Fse; if(!fs.existsSync(srcPath)) { // console.warn("文件不存在:", srcPath); return; } var stat = fs.lstatSync(srcPath); if(stat.isFile()) { fs.unlinkSync(srcPath); } else if(stat.isDirectory()) { var paths = fs.readdirSync(srcPath); //同步读取当前目录 for(var i = 0, len = paths.length; i < len; i ++) { var name = paths[i]; var itemSrc = path.join(srcPath, name); var stat = fs.lstatSync(itemSrc); if(stat.isFile()) { fs.unlinkSync(itemSrc); } else if(stat.isDirectory()) { this.Delete(itemSrc); } } fs.rmdirSync(srcPath); } } }