fs.access(path[, mode], callback)
版本 | 變化 |
---|---|
v18.0.0 | 將無效回調傳遞給 |
v7.6.0 |
|
v6.3.0 |
|
v0.11.15 | 添加於:v0.11.15 |
參數
path
<string> | <Buffer> | <URL>mode
<integer> 默認:fs.constants.F_OK
callback
<Function>err
<Error>
測試用戶對 path
指定的文件或目錄的權限。 mode
參數是一個可選整數,用於指定要執行的可訪問性檢查。 mode
應該是值 fs.constants.F_OK
或由 fs.constants.R_OK
、 fs.constants.W_OK
和 fs.constants.X_OK
中的任何一個的按位或組成的掩碼(例如 fs.constants.W_OK | fs.constants.R_OK
)。檢查 File access constants 以獲取 mode
的可能值。
最後一個參數 callback
是一個回調函數,使用可能的錯誤參數調用。如果任何可訪問性檢查失敗,錯誤參數將是一個Error
對象。以下示例檢查package.json
是否存在,以及它是否可讀或可寫。
import { access, constants } from 'node:fs';
const file = 'package.json';
// Check if the file exists in the current directory.
access(file, constants.F_OK, (err) => {
console.log(`${file} ${err ? 'does not exist' : 'exists'}`);
});
// Check if the file is readable.
access(file, constants.R_OK, (err) => {
console.log(`${file} ${err ? 'is not readable' : 'is readable'}`);
});
// Check if the file is writable.
access(file, constants.W_OK, (err) => {
console.log(`${file} ${err ? 'is not writable' : 'is writable'}`);
});
// Check if the file is readable and writable.
access(file, constants.R_OK | constants.W_OK, (err) => {
console.log(`${file} ${err ? 'is not' : 'is'} readable and writable`);
});
在調用 fs.open()
、 fs.readFile()
或 fs.writeFile()
之前,不要使用 fs.access()
檢查文件的可訪問性。這樣做會引入競爭條件,因為其他進程可能會在兩次調用之間更改文件的狀態。相反,用戶代碼應該直接打開/讀取/寫入文件並處理文件不可訪問時引發的錯誤。
寫(不推薦)
import { access, open, close } from 'node:fs';
access('myfile', (err) => {
if (!err) {
console.error('myfile already exists');
return;
}
open('myfile', 'wx', (err, fd) => {
if (err) throw err;
try {
writeMyData(fd);
} finally {
close(fd, (err) => {
if (err) throw err;
});
}
});
});
寫(推薦)
import { open, close } from 'node:fs';
open('myfile', 'wx', (err, fd) => {
if (err) {
if (err.code === 'EEXIST') {
console.error('myfile already exists');
return;
}
throw err;
}
try {
writeMyData(fd);
} finally {
close(fd, (err) => {
if (err) throw err;
});
}
});
閱讀(不推薦)
import { access, open, close } from 'node:fs';
access('myfile', (err) => {
if (err) {
if (err.code === 'ENOENT') {
console.error('myfile does not exist');
return;
}
throw err;
}
open('myfile', 'r', (err, fd) => {
if (err) throw err;
try {
readMyData(fd);
} finally {
close(fd, (err) => {
if (err) throw err;
});
}
});
});
閱讀(推薦)
import { open, close } from 'node:fs';
open('myfile', 'r', (err, fd) => {
if (err) {
if (err.code === 'ENOENT') {
console.error('myfile does not exist');
return;
}
throw err;
}
try {
readMyData(fd);
} finally {
close(fd, (err) => {
if (err) throw err;
});
}
});
上麵的"not recommended" 示例檢查可訪問性,然後使用該文件; "recommended" 示例更好,因為它們直接使用文件並處理錯誤(如果有)。
通常,僅當文件不會被直接使用時才檢查文件的可訪問性,例如當它的可訪問性是來自另一個進程的信號時。
在 Windows 上,目錄上的access-control 策略 (ACL) 可能會限製對文件或目錄的訪問。但是,fs.access()
函數不會檢查 ACL,因此即使 ACL 限製用戶讀取或寫入路徑,它也可能報告路徑是可訪問的。
相關用法
- Node.js fs.access()用法及代碼示例
- Node.js fs.accessSync()用法及代碼示例
- Node.js fs.accessSync(path[, mode])用法及代碼示例
- Node.js fs.appendFileSync()用法及代碼示例
- Node.js fs.appendFile()用法及代碼示例
- Node.js fs.appendFileSync(path, data[, options])用法及代碼示例
- Node.js fs.appendFile(path, data[, options], callback)用法及代碼示例
- Node.js fs.filehandle.datasync()用法及代碼示例
- Node.js fs.chmod()用法及代碼示例
- Node.js fs.read()用法及代碼示例
- Node.js fs.Dirent.isFile()用法及代碼示例
- Node.js fs.Dir.closeSync()用法及代碼示例
- Node.js fs.fchmodSync()用法及代碼示例
- Node.js fs.symlink(target, path[, type], callback)用法及代碼示例
- Node.js fs.constants用法及代碼示例
- Node.js fs.mkdir()用法及代碼示例
- Node.js fs.mkdirSync()用法及代碼示例
- Node.js fs.fdatasync()用法及代碼示例
- Node.js fs.Dirent.isFIFO()用法及代碼示例
- Node.js fs.copyFile()用法及代碼示例
- Node.js fs.writeSync()用法及代碼示例
- Node.js fs.symlink()用法及代碼示例
- Node.js fs.truncate()用法及代碼示例
- Node.js fs.openSync()用法及代碼示例
- Node.js fs.filehandle.write()用法及代碼示例
注:本文由純淨天空篩選整理自nodejs.org大神的英文原創作品 fs.access(path[, mode], callback)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。