node fs文件系统

# node-fs 文件系统

## 文件系统差异

> 不同文件系统行为表现有差异,大小写敏感差异,编码格式差异等。在日常使用 fs 文件系统的时候,我们要注意一些问题:

- 不要轻易比较两个文件的内容是否一致(不同文件系统都有自己的编码比较表)

- 不要损坏文件名和时间戳

- 时间戳解析各有不同

- mos:HFS+,linux:ext,windows:ntfs

> [测试一下](./test_time.js)

## fs 简介

- Node.js 中的 fs 模块是文件操作的封装,它提供了同步和异步两个版本,具有 sync 后缀的方法为同步方法,不具有的为异步方法,比如:readFile ,readFileSync

- 建议使用异步方法。相比于同步方法,异步方法不会阻塞进程,性能更快,速度也更快

> [测试一下](./test_sync.js)

## 文件权限

> 因为 fs 模块需要对文件进行操作,那就要懂得文件权限,一般文件权限有读、写、执行操作,不同的用户可能权限不懂

- 我们可以通过 git 交互界面输入 ls -al 来查看目录中文件和文件夹的权限

- 第一位代表是文件还是文件夹,d 开头代表文件夹,- 开头的代表文件,而后面九位就代表当前用户、用户所属组和其他用户的权限位,按每三位划分,

  分别代表读(r)、写(w)和执行(x),- 代表没有当前位对应的权限

- windows 文件夹默认操作权限

1. 文件所有者

   | 权限项   | 读  | 写  | 执行 |

   | -------- | --- | --- | ---- |

   | 字符表示 | r   | w   | x    |

   | 数字表示 | 4   | 2   | 1    |

2. 文件所有组

   | 权限项   | 读  | 写  | 执行 |

   | -------- | --- | --- | ---- |

   | 字符表示 | r   | -   | x    |

   | 数字表示 | 4   | -   | 1    |

3. 其他用户

   | 权限项   | 读  | 写  | 执行 |

   | -------- | --- | --- | ---- |

   | 字符表示 | r   | -   | x    |

   | 数字表示 | 4   | -   | 1    |

- windows 文件默认操作权限

1. 文件所有者

   | 权限项   | 读  | 写  | 执行 |

   | -------- | --- | --- | ---- |

   | 字符表示 | r   | w   | -    |

   | 数字表示 | 4   | 2   | -    |

2. 文件所有组

   | 权限项   | 读  | 写  | 执行 |

   | -------- | --- | --- | ---- |

   | 字符表示 | r   | -   | -    |

   | 数字表示 | 4   | -   | -    |

3. 其他用户

   | 权限项   | 读  | 写  | 执行 |

   | -------- | --- | --- | ---- |

   | 字符表示 | r   | -   | -    |

   | 数字表示 | 4   | -   | -    |

## 标识符

> 因为文件权限的存在,node 也就有自己的标识符

1. 符号表

   | 符号 | 标识                                                                          |

   | ---- | ----------------------------------------------------------------------------- |

   | a    | 追加写入,文件不存在则创建文件                                                |

   | ax   | 与“a”类似,但如果路径存在,则会失败                                           |

   | a+   | 打开文件进行读取和追加。如果文件不存在,则创建该文件                          |

   | ax+  | 与“a+”类似,但如果路径存在,则会失败                                          |

   | as   | 在同步模式下打开文件进行追加。如果文件不存在,则创建该文件                    |

   | as+  | 在同步模式下打开文件进行读取和追加。如果文件不存在,则创建该文件              |

   | r    | 打开文件进行读取。如果文件不存在,则会发生异常                                |

   | r+   | 打开文件进行读写。如果文件不存在,则会发生异常                                |

   | rs+  | 以同步模式打开文件进行读写。指示操作系统绕过本地文件系统缓存,不建议使用此标志 |

   | w    | 打开文件进行写入。创建文件(如果不存在)或截断文件(如果存在)                |

   | wx   | 与“w”类似,但如果路径存在,则会失败                                           |

   | w+   | 打开文件进行读写。创建文件(如果不存在)或截断文件(如果存在)                |

   | wx+  | 与“w+”类似,但如果路径存在,则会失败                                          |

## 常用命令

### 删除文件

fs.unlink(path, callback)

```javascript

let fs = require("fs");

fs.unlink("input.txt", function (err) {

  if (err) {

    return console.error(err);

  }

  console.log("文件删除成功!");

});

```

| 参数     | 描述     | 类型              | 默认值                        |

| -------- | -------- | ----------------- | ----------------------------- |

| path     | 文件路径 | string/Buffer/URL | -                             |

| callback | 回调函数 | function          | 有一个参数 err,err 为错误信息 |

### 创建目录

fs.mkdir(path[, options], callback)

```javascript

let fs = require("fs");

fs.mkdir("/tmp/test/", function (err) {

  if (err) {

    return console.error(err);

  }

  console.log("目录创建成功。");

});

```

| 参数     | 描述     | 类型              | 默认值                                                                            |

| -------- | -------- | ----------------- | --------------------------------------------------------------------------------- |

| path     | 文件路径 | string/Buffer/URL | -                                                                                 |

| options  | 参数     | object/intege     | recursive:是否以递归的方式创建目录,默认为 false,mode - 设置目录权限,默认为 0777 |

| callback | 回调函数 | function          | 有一个参数 err,err 为错误信息                                                     |

### 读取目录

fs.readdir(path, callback)

```javascript

let fs = require("fs");

fs.readdir("/tmp/", function (err, files) {

  if (err) {

    return console.error(err);

  }

  files.forEach(function (file) {

    console.log(file);

  });

});

```

| 参数     | 描述     | 类型              | 默认值                        |

| -------- | -------- | ----------------- | ----------------------------- |

| path     | 文件路径 | string/Buffer/URL | -                             |

| callback | 回调函数 | function          | 有一个参数 err,err 为错误信息 |

### 删除目录

fs.rmdir(path, callback)

```javascript

let fs = require("fs");

fs.readdir("/tmp/", function (err, files) {

  if (err) {

    return console.error(err);

  }

  files.forEach(function (file) {

    console.log(file);

  });

});

```

| 参数     | 描述     | 类型              | 默认值                        |

| -------- | -------- | ----------------- | ----------------------------- |

| path     | 文件路径 | string/Buffer/URL | -                             |

| callback | 回调函数 | function          | 有一个参数 err,err 为错误信息 |

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值