/// /// /// import { createReadStream, createWriteStream, Dirent, Stats } from "fs"; import { Pattern } from "./matcher"; /** 表示一个文件系统 */ export declare class FileSystem { /** 判断当前文件系统是否是物理文件系统 */ get native(): boolean; /** 判断当前文件系统是否忽略大小写 */ readonly isCaseInsensitive: boolean; /** * 获取文件或文件夹的属性 * @param path 要获取的路径 * @param resolveLink 如果是软链接,是否解析链接引用的路径属性 */ getStat(path: string, resolveLink?: boolean): Promise; /** * 判断指定的路径是否存在 * @param path 要判断的路径 * @returns 如果路径不存在,则返回 `false`,否则返回 `true` */ exists(path: string): Promise; /** * 判断指定的文件是否存在 * @param path 要判断的路径 * @returns 如果文件不存在或路径不是一个文件,则返回 `false`,否则返回 `true` */ existsFile(path: string): Promise; /** * 判断指定的文件夹是否存在 * @param path 要判断的路径 * @returns 如果文件夹不存在或路径不是一个文件,则返回 `false`,否则返回 `true` */ existsDir(path: string): Promise; /** * 如果指定的路径不存在则直接返回,否则返回重命名后的新路径 * @param path 要测试的文件或文件夹路径 * @param append 如果路径已存在则添加的文件名后缀,其中的数字会递增直到文件不存在 */ ensureNotExists(path: string, append?: string): Promise; /** * 如果路径所在的文件夹不存在则创建一个 * @param path 相关的路径 */ ensureDirExists(path: string): Promise; /** * 创建一个文件夹 * @param path 要创建的文件夹路径 */ createDir(path: string): Promise; /** * 创建一个临时文件夹 * @param parent 临时文件夹的根目录 * @returns 返回已创建文件夹路径 */ createTempDir(parent?: string): Promise; /** * 删除指定的文件夹 * @param path 要删除的文件夹路径 * @param recursive 是否删除所有所有子文件夹和文件,如果为 `false` 则只删除空文件夹 * @returns 返回删除的文件数 */ deleteDir(path: string, recursive?: boolean): Promise; /** * 清空指定的文件夹 * @param path 要清空的文件夹路径 * @returns 返回删除的文件数 */ cleanDir(path: string): Promise; /** * 如果路径所在的文件夹是空的则删除所在文件夹 * @param path 文件夹内的文件路径 * @returns 返回已删除的文件夹数,如果文件夹不空,返回 `0` */ deleteParentDirIfEmpty(path: string): Promise; /** * 删除指定的文件或软链接 * @param path 要删除的文件路径 * @returns 如果删除成功则返回 `true`,否则说明文件不存在,返回 `false` */ deleteFile(path: string): Promise; /** * 深度遍历指定的路径并执行回调 * @param path 要遍历的文件或文件夹路径 * @param options 遍历的选项 */ walk(path: string, options: WalkOptions): Promise; /** * 遍历通配符匹配的所有文件 * @param pattern 要匹配的模式 * @param callback 遍历的回调函数 * @param baseDir 查找的基文件夹路径 * @param followLinks 是否展开链接,默认 `true` */ walkGlob(pattern: Pattern, callback: (path: string) => any, baseDir?: string, followLinks?: boolean): Promise; /** * 查找匹配指定模式的所有文件 * @param pattern 要匹配的模式 * @param baseDir 查找的基文件夹路径 * @param followLinks 是否展开链接,默认 `true` * @returns 返回所有匹配文件的路径 */ glob(pattern: Pattern, baseDir?: string, followLinks?: boolean): Promise; /** * 获取文件夹内的所有文件和文件夹组成的数组 * @param path 要读取的文件夹路径 * @param withFileTypes 是否包含文件类型信息 */ readDir(path: string, withFileTypes: true): Promise; /** * 获取文件夹内的所有文件和文件夹组成的数组 * @param path 要读取的文件夹路径 * @param withFileTypes 是否包含文件类型信息 */ readDir(path: string, withFileTypes?: boolean): Promise; /** * 读取指定文件的二进制内容 * @param path 要读取的文件路径 */ readFile(path: string): Promise; /** * 读取指定文件的文本内容 * @param path 要读取的文件路径 * @param encoding 文件的编码 */ readFile(path: string, encoding: BufferEncoding): Promise; /** * 使用 UTF-8 编码读取指定的文本文件 * @param path 要读取的文件路径 * @param throwIfNotFound 如果文件不存在,是否抛出异常,如果值为 `false`,则文件不存在时返回 `null` */ readText(path: string, throwIfNotFound: false): Promise; /** * 使用 UTF-8 编码读取指定的文本文件 * @param path 要读取的文件路径 * @param throwIfNotFound 如果文件不存在,是否抛出异常,如果值为 `false`,则文件不存在时返回 `null` */ readText(path: string, throwIfNotFound?: boolean): Promise; /** * 将内容写入指定的文件 * @param path 要写入的文件路径 * @param data 要写入的文件数据 * @param overwrite 是否允许覆盖现有的目标 * @returns 如果写入成功则返回 `true`,否则说明目标已存在,返回 `false` */ writeFile(path: string, data: string | Buffer, overwrite?: boolean): Promise; /** * 在指定文件末尾追加内容 * @param path 要创建的文件路径 * @param data 要写入的文件数据 */ appendFile(path: string, data: string | Buffer): Promise; /** * 读取指定的 JSON 文件,如果文件不存在或解析失败则返回 `undefined` * @param path 要读取的文件路径 */ readJSON(path: string): Promise; /** * 写入指定的 JSON 文件 * @param path 要保存的文件路径 * @param data 要保存的 JSON 数据 */ writeJSON(path: string, data: any): Promise; /** * 搜索指定文件 * @param path 要搜索的文件路径 * @param search 搜索的源 * @param limit 限制匹配的数目 */ searchText(path: string, search: string | RegExp, limit?: number): Promise; /** * 搜索匹配的文件 * @param pattern 要搜索的通配符 * @param search 搜索的源 * @param baseDir 搜索的根目录 * @param limit 限制匹配的数目 * @param followLinks 是否展开链接,默认 `false` */ searchAllText(pattern: string, search: string | RegExp, baseDir?: string, limit?: number, followLinks?: boolean): Promise; /** * 替换指定文件 * @param path 要搜索的文件路径 * @param search 替换的源 * @param replacer 替换的目标 * @returns 返回是否已修改文件 */ replaceText(path: string, search: string | RegExp, replacer: string | ((source: string, ...args: any[]) => string)): Promise; /** * 替换匹配的文件 * @param pattern 要搜索的通配符 * @param search 替换的源 * @param replacer 替换的目标 * @param baseDir 搜索的根目录 * @param followLinks 是否展开链接,默认 `false` * @returns 返回受影响的文件数 */ replaceAllText(pattern: string, search: string | RegExp, replacer: string | ((source: string, ...args: any[]) => string), baseDir?: string, followLinks?: boolean): Promise; /** * 创建一个软链接 * @param path 要创建的文件路径 * @param target 要链接的目标路径 * @param overwrite 是否覆盖已有的目标 * @returns 如果创建成功则返回 `true`,否则说明目标已存在,返回 `false` */ createLink(path: string, target: string, overwrite?: boolean): Promise; /** * 读取软链接的实际地址 * @param path 要读取的软链接路径 */ readLink(path: string): Promise; /** * 创建一个用于读取指定文件的流 * @param path 要读取的文件路径 * @param options 附加选项 */ createReadStream(path: string, options?: Parameters[1]): import("fs").ReadStream; /** * 创建一个用于写入指定文件的流 * @param path 要读取的文件路径 * @param options 附加选项 */ createWriteStream(path: string, options?: Parameters[1]): import("fs").WriteStream; /** * 复制指定的文件夹 * @param src 要复制的源路径 * @param dest 要复制的目标路径 * @param overwrite 是否覆盖已有的目标 * @param preserveLinks 是否保留链接 * @param ignore 忽略的通配符 * @returns 返回已复制的文件数 */ copyDir(src: string, dest: string, overwrite?: boolean, preserveLinks?: boolean, ignore?: Pattern): Promise; /** * 复制指定的文件 * @param src 要复制的源路径 * @param dest 要复制的目标路径 * @param overwrite 是否覆盖已有的目标 * @returns 如果复制成功则返回 `true`,否则说明目标已存在,返回 `false` */ copyFile(src: string, dest: string, overwrite?: boolean): Promise; /** * 复制指定的软链接 * @param src 要复制的源路径 * @param dest 要复制的目标路径 * @param overwrite 是否覆盖已有的目标 * @returns 如果复制成功则返回 `true`,否则说明目标已存在,返回 `false` */ copyLink(src: string, dest: string, overwrite?: boolean): Promise; /** * 移动指定的文件夹 * @param src 要移动的源路径 * @param dest 要移动的目标路径 * @param overwrite 是否允许覆盖现有的目标 * @param preserveLinks 是否保留链接 */ moveDir(src: string, dest: string, overwrite?: boolean, preserveLinks?: boolean): Promise; /** * 移动指定的文件 * @param src 要移动的源路径 * @param dest 要移动的目标路径 * @param overwrite 是否允许覆盖现有的目标 * @returns 如果移动成功则返回 `true`,否则说明目标已存在,返回 `false` */ moveFile(src: string, dest: string, overwrite?: boolean): Promise; /** * 移动指定的软链接 * @param src 要移动的源路径 * @param dest 要移动的目标路径 * @param overwrite 是否允许覆盖现有的目标 * @returns 如果移动成功则返回 `true`,否则说明目标已存在,返回 `false` */ moveLink(src: string, dest: string, overwrite?: boolean): Promise; /** * 获取指定路径区分大小写的实际路径,如果地址不存在则返回 `null` * @param path 原路径 */ getRealPath(path: string): Promise; } /** 表示遍历文件或文件夹的选项 */ export interface WalkOptions { /** * 如果为 `true` 则软链接被解析为实际的路径,否则不解析软链接 * @default true */ follow?: boolean; /** * 处理错误的回调函数 * @param error 错误对象 * @param path 出现错误的路径 * @param stats 文件的属性 */ error?(error: NodeJS.ErrnoException, path: string, stats?: Dirent | Stats): any; /** * 处理一个文件夹的回调函数,如果函数返回 `false` 则跳过遍历此文件夹 * @param path 当前文件夹的路径 * @param entries 当前文件夹下的所有项 * @param stats 文件的属性 */ dir?(path: string, entries: Dirent[], stats?: Dirent | Stats): any; /** * 处理一个文件的回调函数 * @param path 当前文件的路径 * @param stats 文件的属性 */ file?(path: string, stats?: Dirent | Stats): any; /** * 处理一个其它类型文件(如软链接)的回调函数 * @param path 当前文件的路径 * @param stats 文件的属性 */ other?(path: string, stats: Dirent | Stats): any; } /** 表示一个搜索结果 */ export interface SearchTextResult { /** 文件路径 */ path: string; /** 文件中匹配结果的开始索引 */ start: number; /** 文件中匹配结果的结束索引 */ end: number; /** 文件源码 */ content: string; } /** 表示一个异步文件系统 */ export declare const fs: FileSystem;