import { promises as fsPromises } from 'fs'; import path from 'path'; import { byteConvert } from './common'; import { printError } from './print'; import { getFileHeadData, getFileMiddleData, getFileRowsNumber, getFileTailData, } from './shell'; interface FileInfo { name: string fullPath: string size: string rowCount: number } interface SampledData { head: string[] middle: string[] tail: string[] } /** * 新建文件 * @param filePath 文件路径 * @param contents 文件内容,数组里的一项就是文件里的一行 */ export function createFile(filePath: string, contents: string[]): Promise { const data = contents.join('\n'); return fsPromises.writeFile(filePath, data, 'utf-8').catch((err) => { printError(err); throw err; }); } /** * 读取文件 * @param filePath 文件路径 */ export function readFile(filePath: string): Promise { return new Promise((resolve, reject) => { fsPromises.readFile(filePath, 'utf-8') .then((data) => { resolve(data.split('\n')); }) .catch((err) => { printError(err); throw err; }); }); } /** * 获取文件信息 * @param filePath 文件路径 */ export async function getFileStats(filePath: string): Promise { const { size } = await fsPromises.stat(filePath); const rowCount = await getFileRowsNumber(filePath); return Promise.resolve({ name: path.basename(filePath), fullPath: filePath, size: byteConvert(size), rowCount, }); } export async function getSampledData(filePath: string, rowCount = 3): Promise { return Promise.resolve({ head: await getFileHeadData(filePath, rowCount), middle: await getFileMiddleData(filePath, rowCount), tail: await getFileTailData(filePath, rowCount), }); }