📜  Node.js fs.watch() 方法

📅  最后修改于: 2022-05-13 01:56:42.057000             🧑  作者: Mango

Node.js fs.watch() 方法

fs.watch() 方法是 fs 模块的内置应用程序编程接口,用于持续监视给定文件或目录中的更改。它返回一个 fs.FSWatcher 对象,该对象可用于跟踪文件中的更改。

它有一个可选的侦听器作为第三个参数,可用于获取发生的更改。这个监听器有两个参数,一个是被修改的文件或目录的名称,另一个是修改的类型。在查看文件时,如果它消失并重新出现,则会发出“rename”事件,如果文件内容被修改,则会发出“change”事件。

注意:此方法不可靠,每次修改都可能在监听器中显示多个事件。

句法:

fs.watch( filename[, options][, listener] )

参数:此方法接受三个参数,如上所述,如下所述:

  • 文件名:它是一个字符串、缓冲区或 URL,表示要监视的文件或目录的名称。
  • options:它是一个字符串或对象,可用于修改方法的行为。它是一个可选参数。它具有以下参数:
    • 持久性:它是一个布尔值,用于指定只要正在监视文件,进程是否应该继续。默认值是true。
    • recursive:它是一个布尔值,用于指定是否应监视给定目录的所有子目录。默认值为假。
    • encoding:它是一个字符串,它指定已用于传递给侦听器的文件名的字符编码。
  • listener:它是一个在文件被访问或修改时调用的函数。它是一个可选参数。
    • eventType:它是一个字符串,指定文件经历的修改类型。
    • 文件名:它是一个字符串或缓冲区,指定触发事件的文件名。

返回值:函数调用成功时返回一个fs.StatWatcher对象。

下面的示例说明了 Node.js 中的fs.watch() 方法

示例 1:此示例显示文件上 watch() 方法的用法。

javascript
// Node.js program to demonstrate the
// fs.watch() method
  
// Import the filesystem module
const fs = require('fs');
  
fs.watch("example_file.txt", (eventType, filename) => {
  console.log("\nThe file", filename, "was modified!");
  console.log("The type of change was:", eventType);
});
  
// Renaming the file to a new name
setTimeout(
  () => fs.renameSync("example_file.txt", "new_file.txt"),
  1000
);
  
// Renaming the file back to its old name
setTimeout(
  () => fs.renameSync("new_file.txt", "example_file.txt"),
  2000
);
  
// Changing the contents of the file 
setTimeout(
  () => fs.writeFileSync("example_file.txt", 
  "The file is modified"), 3000
);


javascript
// Node.js program to demonstrate the
// fs.watch() method
  
// Import the filesystem module
const fs = require('fs');
  
fs.watch("ex_dir", (eventType, filename) => {
  console.log("\nThe file", filename, "was modified!");
  console.log("The type of change was:", eventType);
});
  
// Changing the contents of a file 
setTimeout(
  () => fs.writeFileSync("ex_dir/ex1.txt", 
  "The file is modified"), 1000
);
  
// Renaming a file to a new name
setTimeout(
  () => fs.renameSync("ex_dir/ex2.txt", 
  "ex_dir/new_ex2.txt"), 2000
);


输出:请注意,此方法不可靠,每次修改可能会显示多个事件。

The file example_file.txt was modified!
The type of change was: rename

The file example_file.txt was modified!
The type of change was: rename

The file example_file.txt was modified!
The type of change was: change

示例 2:此示例显示了 watch() 方法在目录上的用法。

javascript

// Node.js program to demonstrate the
// fs.watch() method
  
// Import the filesystem module
const fs = require('fs');
  
fs.watch("ex_dir", (eventType, filename) => {
  console.log("\nThe file", filename, "was modified!");
  console.log("The type of change was:", eventType);
});
  
// Changing the contents of a file 
setTimeout(
  () => fs.writeFileSync("ex_dir/ex1.txt", 
  "The file is modified"), 1000
);
  
// Renaming a file to a new name
setTimeout(
  () => fs.renameSync("ex_dir/ex2.txt", 
  "ex_dir/new_ex2.txt"), 2000
);

输出:请注意,此方法不可靠,每次修改可能会显示多个事件。

The file ex1.txt was modified!
The type of change was: change

The file ex2.txt was modified!
The type of change was: rename

The file new_ex2.txt was modified!
The type of change was: rename

参考: https ://nodejs.org/api/fs.html#fs_fs_watch_filename_options_listener