///
///
///
///
///
///
///
///
/**
* @description 文件系统处理模块
*
* 使用方法:
* ```JavaScript
* var fs = require('fs');
* ```
*
* 一些注意点:
*
* - 运行 `fs.watch(filename)` 会返回一个继承自 EventEmitter 的 watcher, 它支持 'change', 'changeonly', 'renameonly' 三个事件
* - `fs.watchFile(target)` 和 `fs.unwatchFile(target)` 依然可以成对使用
* - `fs.watchFile(target)` 会返回一个继承自 EventEmitter 的 StatsWatcher 对象, 调用 `fs.unwatchFile(target)` 等价于调用 `StatsWatcher.close()`.
* - 因为 uv 在 Linux 上的实现, `fs.watch` 的 `recursive` 选项仅在 win32/darwin 被稳定支持. 你依然可以尝试在 Linux 中尝试使用 `fs.watch('/path/to', { recursive: true }, handler)`, 但可能会发现 `handler` 被回调的时机与你预期的有差异
*
*/
declare module 'fs' {
/**
* @description seek 方式常量,移动到绝对位置
*/
export const SEEK_SET: 0;
/**
* @description seek 方式常量,移动到当前位置的相对位置
*/
export const SEEK_CUR: 1;
/**
* @description seek 方式常量,移动到文件结尾的相对位置
*/
export const SEEK_END: 2;
/**
* ! fs模块的常量对象
*/
const constants: typeof import ('fs_constants');
/**
* @description 查询指定的文件或目录是否存在
* @param path 指定要查询的路径
* @return 返回 True 表示文件或目录存在
*
*/
function exists(path: string): boolean;
function exists(path: string, callback: (err: Error | undefined | null, retVal: boolean)=>any): void;
/**
* @description 查询用户对指定的文件的权限
* @param path 指定要查询的路径
* @param mode 指定查询的权限,默认为文件是否存在
*
*/
function access(path: string, mode?: number): void;
function access(path: string, mode?: number, callback?: (err: Error | undefined | null)=>any): void;
/**
* @description 创建硬链接文件, windows 下不支持此方法
* @param oldPath 源文件
* @param newPath 将要被创建的文件
*
*/
function link(oldPath: string, newPath: string): void;
function link(oldPath: string, newPath: string, callback: (err: Error | undefined | null)=>any): void;
/**
* @description 删除指定的文件
* @param path 指定要删除的路径
*
*/
function unlink(path: string): void;
function unlink(path: string, callback: (err: Error | undefined | null)=>any): void;
/**
* @description 创建一个目录
* @param path 指定要创建的目录名
* @param mode 指定文件权限,Windows 忽略此参数,默认值: 0777
*
*/
function mkdir(path: string, mode?: number): void;
function mkdir(path: string, mode?: number, callback?: (err: Error | undefined | null)=>any): void;
/**
* @description 创建一个目录
*
* 创建参数可以包含以下值:
* ```JavaScript
* {
* recursive: false, // 指定是否父目录不存在是是否自动创建,默认值: false
* mode: 0777 // 指定文件权限,Windows 忽略此参数,默认值: 0777
* }
* ```
* @param path 指定要创建的目录名
* @param opt 指定创建参数
*
*/
function mkdir(path: string, opt: FIBJS.GeneralObject): void;
function mkdir(path: string, opt: FIBJS.GeneralObject, callback: (err: Error | undefined | null)=>any): void;
/**
* @description 删除一个目录
* @param path 指定要删除的目录名
*
*/
function rmdir(path: string): void;
function rmdir(path: string, callback: (err: Error | undefined | null)=>any): void;
/**
* @description 重新命名一个文件
* @param from 指定更名的文件
* @param to 指定要修改的新文件名
*
*/
function rename(from: string, to: string): void;
function rename(from: string, to: string, callback: (err: Error | undefined | null)=>any): void;
/**
* @description 将 src 拷贝到 dest。 默认情况下,如果 dest 已经存在,则覆盖它。
*
* mode 是一个可选的整数,指定拷贝操作的行为。 可以创建由两个或更多个值按位或组成的掩码(比如 fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE)。
* - fs.constants.COPYFILE_EXCL - 如果 dest 已存在,则拷贝操作将失败。
* - fs.constants.COPYFILE_FICLONE - 拷贝操作将尝试创建写时拷贝(copy-on-write)链接。如果平台不支持写时拷贝,则使用后备的拷贝机制。
* - fs.constants.COPYFILE_FICLONE_FORCE - 拷贝操作将尝试创建写时拷贝链接。如果平台不支持写时拷贝,则拷贝操作将失败。
*
* @param from 指定要拷贝的源文件名
* @param to 指定要拷贝的目标文件名
* @param mode 指定拷贝操作的修饰符,缺省为 0
*
*/
function copyFile(from: string, to: string, mode?: number): void;
function copyFile(from: string, to: string, mode?: number, callback?: (err: Error | undefined | null)=>any): void;
/**
* @description 设置指定文件的访问权限,Windows 不支持此方法
* @param path 指定操作的文件
* @param mode 指定设定的访问权限
*
*/
function chmod(path: string, mode: number): void;
function chmod(path: string, mode: number, callback: (err: Error | undefined | null)=>any): void;
/**
* @description 设置指定文件的访问权限,若文件是软连接则不改变指向文件的权限,只在macOS、BSD 系列平台上可用
* @param path 指定操作的文件
* @param mode 指定设定的访问权限
*
*/
function lchmod(path: string, mode: number): void;
function lchmod(path: string, mode: number, callback: (err: Error | undefined | null)=>any): void;
/**
* @description 设置指定文件的拥有者,Windows 不支持此方法
* @param path 指定设置的文件
* @param uid 文件拥有者用户id
* @param gid 文件拥有者组id
*
*/
function chown(path: string, uid: number, gid: number): void;
function chown(path: string, uid: number, gid: number, callback: (err: Error | undefined | null)=>any): void;
/**
* @description 设置指定文件的拥有者,如果指定的文件是软连接则不会改变其指向文件的拥有者,Windows 不支持此方法
* @param path 指定设置的文件
* @param uid 文件拥有者用户id
* @param gid 文件拥有者组id
*
*/
function lchown(path: string, uid: number, gid: number): void;
function lchown(path: string, uid: number, gid: number, callback: (err: Error | undefined | null)=>any): void;
/**
* @description 查询指定文件的基础信息
* @param path 指定查询的文件
* @return 返回文件的基础信息
*
*/
function stat(path: string): Class_Stat;
function stat(path: string, callback: (err: Error | undefined | null, retVal: Class_Stat)=>any): void;
/**
* @description 查询指定文件的基础信息, 和stat不同的是, 当path是一个软连接的时候,返回的将是这个软连接的信息而不是指向的文件的信息
* @param path 指定查询的文件
* @return 返回文件的基础信息
*
*/
function lstat(path: string): Class_Stat;
function lstat(path: string, callback: (err: Error | undefined | null, retVal: Class_Stat)=>any): void;
/**
* @description 读取指定的软连接文件, windows 下不支持此方法
* @param path 指定读取的软连接文件
* @return 返回软连接指向的文件名
*
*/
function readlink(path: string): string;
function readlink(path: string, callback: (err: Error | undefined | null, retVal: string)=>any): void;
/**
* @description 返回指定路径的绝对路径,如果指定路径中包含相对路径也会被展开
* @param path 指定读取的路径
* @return 返回处理后的绝对路径
*
*/
function realpath(path: string): string;
function realpath(path: string, callback: (err: Error | undefined | null, retVal: string)=>any): void;
/**
* @description 创建软连接文件
* @param target 目标文件,可以是文件、目录、或不存在的路径
* @param linkpath 将被创建的软连接文件
* @param type 创建的软连接类型, 可选类型为'file', 'dir', 'junction', 默认为'file', 该参数只在windows上有效,当为'junction'的时候将要创建的目标路径linkpath必须为绝对路径, 而target则会被自动转化为绝对路径。
*
*/
function symlink(target: string, linkpath: string, type?: string): void;
function symlink(target: string, linkpath: string, type?: string, callback?: (err: Error | undefined | null)=>any): void;
/**
* @description 修改文件尺寸,如果指定的长度大于源文件大小则用'\0'填充,否则多于的文件内容将丢失
* @param path 指定被修改文件的路径
* @param len 指定修改后文件的大小
*
*/
function truncate(path: string, len: number): void;
function truncate(path: string, len: number, callback: (err: Error | undefined | null)=>any): void;
/**
* @description 根据文件描述符,读取文件内容
* @param fd 文件描述符
* @param buffer 读取结果写入的 Buffer 对象
* @param offset Buffer 写入偏移量, 默认为 0
* @param length 文件读取字节数,默认为 0
* @param position 文件读取位置,默认为当前文件位置
* @return 实际读取的字节数
*
*/
function read(fd: number, buffer: Class_Buffer, offset?: number, length?: number, position?: number): number;
function read(fd: number, buffer: Class_Buffer, offset?: number, length?: number, position?: number, callback?: (err: Error | undefined | null, retVal: number)=>any): void;
/**
* @description 根据文件描述符,改变文件模式。只在 POSIX 系统有效。
* @param fd 文件描述符
* @param mode 文件的模式
*
*/
function fchmod(fd: number, mode: number): void;
function fchmod(fd: number, mode: number, callback: (err: Error | undefined | null)=>any): void;
/**
* @description 根据文件描述符,改变所有者。只在 POSIX 系统有效。
* @param fd 文件描述符
* @param uid 用户id
* @param gid 组id
*
*/
function fchown(fd: number, uid: number, gid: number): void;
function fchown(fd: number, uid: number, gid: number, callback: (err: Error | undefined | null)=>any): void;
/**
* @description 根据文件描述符,同步数据到磁盘
* @param fd 文件描述符
*
*/
function fdatasync(fd: number): void;
function fdatasync(fd: number, callback: (err: Error | undefined | null)=>any): void;
/**
* @description 根据文件描述符,同步数据到磁盘
* @param fd 文件描述符
*
*/
function fsync(fd: number): void;
function fsync(fd: number, callback: (err: Error | undefined | null)=>any): void;
/**
* @description 读取指定目录的文件信息
* @param path 指定查询的目录
* @return 返回目录的文件信息数组
*
*/
function readdir(path: string): any[];
function readdir(path: string, callback: (err: Error | undefined | null, retVal: any[])=>any): void;
/**
* @description 打开文件,用于读取,写入,或者同时读写
*
* 参数 flags 支持的方式如下:
* - 'r' 只读方式,文件不存在则抛出错误。
* - 'r+' 读写方式,文件不存在则抛出错误。
* - 'w' 只写方式,文件不存在则自动创建,存在则将被清空。
* - 'w+' 读写方式,文件不存在则自动创建。
* - 'a' 只写添加方式,文件不存在则自动创建。
* - 'a+' 读写添加方式,文件不存在则自动创建。
* @param fname 指定文件名
* @param flags 指定文件打开方式,缺省为 "r",只读方式
* @return 返回打开的文件对象
*
*/
function openFile(fname: string, flags?: string): Class_SeekableStream;
function openFile(fname: string, flags?: string, callback?: (err: Error | undefined | null, retVal: Class_SeekableStream)=>any): void;
/**
* @description 打开文件描述符
*
* 参数 flags 支持的方式如下:
* - 'r' 只读方式,文件不存在则抛出错误。
* - 'r+' 读写方式,文件不存在则抛出错误。
* - 'w' 只写方式,文件不存在则自动创建,存在则将被清空。
* - 'w+' 读写方式,文件不存在则自动创建。
* - 'a' 只写添加方式,文件不存在则自动创建。
* - 'a+' 读写添加方式,文件不存在则自动创建。
* @param fname 指定文件名
* @param flags 指定文件打开方式,缺省为 "r",只读方式
* @param mode 当创建文件的时候,指定文件的模式,默认 0666
* @return 返回打开的文件描述符
*
*/
function open(fname: string, flags?: string, mode?: number): number;
function open(fname: string, flags?: string, mode?: number, callback?: (err: Error | undefined | null, retVal: number)=>any): void;
/**
* @description 关闭文件描述符
* @param fd 文件描述符
*
*/
function close(fd: number): void;
function close(fd: number, callback: (err: Error | undefined | null)=>any): void;
/**
* @description 打开文本文件,用于读取,写入,或者同时读写
*
* 参数 flags 支持的方式如下:
* - 'r' 只读方式,文件不存在则抛出错误。
* - 'r+' 读写方式,文件不存在则抛出错误。
* - 'w' 只写方式,文件不存在则自动创建,存在则将被清空。
* - 'w+' 读写方式,文件不存在则自动创建。
* - 'a' 只写添加方式,文件不存在则自动创建。
* - 'a+' 读写添加方式,文件不存在则自动创建。
* @param fname 指定文件名
* @param flags 指定文件打开方式,缺省为 "r",只读方式
* @return 返回打开的文件对象
*
*/
function openTextStream(fname: string, flags?: string): Class_BufferedStream;
function openTextStream(fname: string, flags?: string, callback?: (err: Error | undefined | null, retVal: Class_BufferedStream)=>any): void;
/**
* @description 打开文本文件,并读取内容
* @param fname 指定文件名
* @return 返回文件文本内容
*
*/
function readTextFile(fname: string): string;
function readTextFile(fname: string, callback: (err: Error | undefined | null, retVal: string)=>any): void;
/**
* @description 打开二进制文件,并读取内容
* @param fname 指定文件名
* @param encoding 指定解码方式,缺省不解码
* @return 返回文件文本内容
*
*/
function readFile(fname: string, encoding?: string): any;
function readFile(fname: string, encoding?: string, callback?: (err: Error | undefined | null, retVal: any)=>any): void;
/**
* @description 打开文件,以数组方式读取一组文本行,行结尾标识基于 EOL 属性的设置,缺省时,posix:"\n";windows:"\r\n"
* @param fname 指定文件名
* @param maxlines 指定此次读取的最大行数,缺省读取全部文本行
* @return 返回读取的文本行数组,若无数据可读,或者连接中断,空数组
*
*/
function readLines(fname: string, maxlines?: number): any[];
/**
* @description 创建文本文件,并写入内容
* @param fname 指定文件名
* @param txt 指定要写入的字符串
*
*/
function writeTextFile(fname: string, txt: string): void;
function writeTextFile(fname: string, txt: string, callback: (err: Error | undefined | null)=>any): void;
/**
* @description 创建二进制文件,并写入内容
* @param fname 指定文件名
* @param data 指定要写入的二进制数据
*
*/
function writeFile(fname: string, data: Class_Buffer): void;
function writeFile(fname: string, data: Class_Buffer, callback: (err: Error | undefined | null)=>any): void;
/**
* @description 创建二进制文件,并写入内容
* @param fname 指定文件名
* @param data 指定要写入的二进制数据
*
*/
function appendFile(fname: string, data: Class_Buffer): void;
function appendFile(fname: string, data: Class_Buffer, callback: (err: Error | undefined | null)=>any): void;
/**
* @description 设置 zip 虚拟文件映射
* @param fname 指定映射路径
* @param data 指定映射的 zip 文件数据
*
*/
function setZipFS(fname: string, data: Class_Buffer): void;
/**
* @description 清除 zip 虚拟文件映射
* @param fname 指定映射路径,缺省清除全部缓存
*
*/
function clearZipFS(fname?: string): void;
/**
* @description 观察一个文件, 返回对应的 watcher 对象
* @param fname 指定要观察的文件对象
* @return FSWatcher 对象
*
*/
function watch(fname: string): Class_FSWatcher;
/**
* @description 观察一个文件, 返回对应的 watcher 对象
* @param fname 指定要观察的文件对象
* @param callback `(evtType: 'change' | 'rename', filename: string) => any` 当文件对象发生变化时的处理回调
* @return FSWatcher 对象
*
*/
function watch(fname: string, callback: (...args: any[])=>any): Class_FSWatcher;
/**
* @description 观察一个文件, 返回对应的 watcher 对象
*
* options 支持的选项如下:
* ```JavaScript
* {
* "persistent": true, // {boolean} default: true 是否只要目标文件还在被观察, 进程就不退出
* "recursive": false, // {boolean} default: false 对于 fname 为文件夹的情况, 是否递归地观察其下所有的子目录
* "encoding": "utf8", // {enum} default: 'utf8' 指定解析传入的 fname 的字符编码
* }
* ```
* @param fname 指定要观察的文件对象
* @param options 观察选项
* @return FSWatcher 对象
*
*/
function watch(fname: string, options: FIBJS.GeneralObject): Class_FSWatcher;
/**
* @description 观察一个文件, 返回对应的 watcher 对象
*
* options 支持的选项如下:
* ```JavaScript
* {
* "persistent": true, // {boolean} default: true 是否只要目标文件还在被观察, 进程就不退出
* "recursive": false, // {boolean} default: false 对于 fname 为文件夹的情况, 是否递归地观察其下所有的子目录
* "encoding": "utf8", // {enum} default: 'utf8' 指定解析传入的 fname 的字符编码
* }
* ```
* @param fname 指定要观察的文件对象
* @param options 观察选项
* @param callback `(evtType: 'change' | 'rename', filename: string) => any` 当文件对象发生变化时的处理回调
* @return FSWatcher 对象
*
*/
function watch(fname: string, options: FIBJS.GeneralObject, callback: (...args: any[])=>any): Class_FSWatcher;
/**
* @description 观察一个文件, 返回对应的 StatsWatcher 对象
* @param fname 指定要观察的文件对象
* @param callback `(curStats: Stats, prevStats: Stats) => any` 当文件对象的 stats 发生变化时的处理回调
* @return StatsWatcher 对象
*
*/
function watchFile(fname: string, callback: (...args: any[])=>any): Class_StatsWatcher;
/**
* @description 观察一个文件, 返回对应的 StatsWatcher 对象
*
* options 支持的选项如下:
* ```JavaScript
* {
* "persistent": true, // {boolean} default: true 是否只要目标文件还在被观察, 进程就不退出
* "recursive": false, // {boolean} default: false 对于 fname 为文件夹的情况, 是否递归地观察其下所有的子目录
* "encoding": "utf8", // {enum} default: 'utf8' 指定解析传入的 fname 的字符编码
* }
* ```
* @param fname 指定要观察的文件对象
* @param options 观察选项
* @param callback `(curStats: Stats, prevStats: Stats) => any` 当文件对象的 stats 发生变化时的处理回调
* @return StatsWatcher 对象
*
*/
function watchFile(fname: string, options: FIBJS.GeneralObject, callback: (...args: any[])=>any): Class_StatsWatcher;
/**
* @description 从观察 fname 的 StatsWatcher 中移除所有观察事件的回调
* @param fname 指定要观察的文件对象
*
* @return StatsWatcher 对象
*
*/
function unwatchFile(fname: string): void;
/**
* @description 从观察 fname 的 StatsWatcher 的观察事件回调中移除 `callback` 回调
* 即便 callback 不再 StatsWatcher 的观察事件回调中也不会报错
*
* @param fname 指定要观察的文件对象
* @param callback 要移除的回调
* @return StatsWatcher 对象
*
*/
function unwatchFile(fname: string, callback: (...args: any[])=>any): void;
}