當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Node.js fs.watchFile()用法及代碼示例


fs.watchFile()方法用於連續監視給定文件上的更改。它具有一個回調監聽器,每次訪問文件時都會調用該監聽器。它具有一個可選的options參數,該參數可用於指定屬性,例如必須輪詢文件的間隔時間以及隻要監視文件就可以繼續進行。

偵聽器有兩個參數,即當前stat對象和上一個stat對象。這可用於比較對文件的更改。修改後的文件訪問時間可以從fs.Stat對象的mtime屬性中找到。

在觀看文件時,如果文件消失並重新出現,則消失回調的previousStatic將與外觀回調的previousStat相同。重命名文件然後再次重命名回其原始名稱時,會發生這種情況。當文件被刪除然後再恢複時,也會發生這種情況。

用法:

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

參數:此方法接受上述和以下所述的三個參數:



  1. filename:它是一個字符串,緩衝區或URL,表示要監視的文件的文件名。
  2. options:它是一個對象,可用於修改方法的行為。它是一個可選參數。它具有以下參數:
    • bigint:它是一個布爾值,用於將fs.Stat對象的數值指定為BigInt值。默認值為false。
    • persistent:它是一個布爾值,用於指定隻要正在監視文件,該過程是否應該繼續。默認值是true。
    • interval:它是整數,指定每次輪詢到目標之間的時間間隔。以毫秒為單位指定。默認值為5007。
  3. listener:訪問或修改文件時將調用該函數。
    • current:這是一個fs.Stats對象,它表示文件被訪問或修改後的當前狀態。
    • previous:這是一個fs.Stats對象,它表示文件被訪問或修改之前的先前狀態。

返回值:成功調用該函數後,它將返回一個fs.StatWatcher對象。

以下示例說明了Node.js中的fs.watchFile()方法:示例1:本示例說明了watchFile()方法及其參數的用法。

// Node.js program to demonstrate 
// the fs.watchFile() method 
  
// Import the filesystem module 
const fs = require('fs'); 
  
fs.watchFile( 
  
  // The name of the file to watch 
  "example_file.txt", 
  
  // The options parameter is used to  
  //modify the behaviour of the method 
  { 
    // Specify the use of big integers 
    // in the Stats object  
    bigint:false, 
  
    // Specify if the process should  
    // continue as long as file is 
    // watched 
    persistent:true, 
  
    // Specify the interval between 
    // each poll the file 
    interval:4000, 
  }, 
  (curr, prev) => { 
    console.log("\nThe file was edited"); 
  
    // Show the time when the file was modified 
    console.log("Previous Modified Time", prev.mtime); 
    console.log("Current Modified Time", curr.mtime); 
  
    console.log( 
      "The contents of the current file are:", 
      fs.readFileSync("example_file.txt", "utf8") 
    ); 
  } 
); 
  
// Make Changes to the file for the first time 
fs.writeFileSync("example_file.txt", 
   "File Contents are Edited"); 
  
// Make Changes to the file for the second time 
setTimeout( 
  () => fs.writeFileSync("example_file.txt", 
          "File Contents are Edited Again"), 
  5000 
);

輸出:

The file was edited
Previous Modified Time 2020-05-30T07:52:14.587Z
Current Modified Time 2020-05-30T08:01:40.948Z
The contents of the current file are:File Contents are Edited

The file was edited
Previous Modified Time 2020-05-30T08:01:40.948Z
Current Modified Time 2020-05-30T08:01:45.950Z
The contents of the current file are:File Contents are Edited Again

範例2:本示例顯示了文件重命名然後重命名回其原始名稱,導致文件消失並重新出現時的文件修改時間。

// Node.js program to demonstrate  
// the fs.watchFile() method 
  
// Import the filesystem module 
const fs = require('fs'); 
  
fs.watchFile("example_file.txt", (curr, prev) => { 
  console.log("\nThe File was modified"); 
  console.log("Previous Modification Time", prev.mtime); 
  console.log("Current Modification Time", curr.mtime); 
}); 
  
// 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"), 
  6000 
);

輸出:

Previous Modification Time 2020-05-30T08:01:45.950Z
Current Modification Time 1970-01-01T00:00:00.000Z

The File was modified
Previous Modification Time 2020-05-30T08:01:45.950Z
Current Modification Time 2020-05-30T08:01:45.950Z

參考: https://nodejs.org/api/fs.html#fs_fs_watchfile_filename_options_listener




相關用法


注:本文由純淨天空篩選整理自sayantanm19大神的英文原創作品 Node.js | fs.watchFile() Method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。