1
0
Fork 0
Obsidian 管理的个人笔记仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

38 lines
2.0 KiB

>这篇文章是 [Working with the file system on Node.js](https://2ality.com/2022/06/nodejs-file-system.html)学习过程中的个人总结和笔记,如果你对 Nodejs 中的文件系统感兴趣,我更建议你直接去看原文章。
## Node.js 文件系统 APIs 具有多种不同的风格
- 同步风格的函数调用 `fs.readFileSync(path, options?): string | Buffer`
- 异步风格的函数调用
- 异步回调 `fs.readFile(path, options?, callback): void`
- 异步 Promise `fsPromises.readFile(path, options?): Promise<string|Buffer>`
它们在名称上很容易区分:
- 异步回调的函数名,如 `fs.readFile()`
- 异步 Promise 的函数名和异步回调的函数名相同,但是在不同的模块中,如 `fsPromises.readFile()`
- 对于同步的函数名,则是在函数结尾加上 Sync 字样,如 `fs.readFileSync`
## 访问文件的方式
1. 可以通过字符串的方式读写文件
2. 可以打开读取流或写入流,并将文件分成更小的块,一次一个。流只允许顺序访问
3. 可以使用文件描述符或文件句柄,通过一个类似流的 API 获得顺序或是随机访问
- 文件描述符 (File descriptors) 是一个用于表示文件的整数,Nodejs 中有很多函数可以管理文件描述符
4. 只有同步风格和异步回调风格的 API 使用文件描述符,对于异步 Promise 风格的 API,则有着更加抽象的类实现:文件句柄类 (class FileHandle),它基于文件描述符
## 文件系统中的一些重要类 (Important classes)
### `URLs` 字符串文件系统路径的替代方案
当 Nodejs 的一个文件系统 API 支持字符串形式的路径参数,那么它通常也会支持 URL 的实例
```javascript
fs.readFileSync('/tmp/text-file.txt')
fs.readFileSync(new URL('file:///tmp/text-file.txt'))
```
手动转换文件路径看起来很容易,但是实际上隐藏着许多坑,所以更加推荐以下函数对路径进行转换
- `url.pathToFileURL()`
- `url.fileURLToPath()`