Node.js v21.7.2 ドキュメント
- Node.js v21.7.2
-
► 目次
- ファイルシステム
- Promise の例
- コールバックの例
- 同期の例
- Promises API
- クラス:
FileHandle
- イベント:
'close'
filehandle.appendFile(data[, options])
filehandle.chmod(mode)
filehandle.chown(uid, gid)
filehandle.close()
filehandle.createReadStream([options])
filehandle.createWriteStream([options])
filehandle.datasync()
filehandle.fd
filehandle.read(buffer, offset, length, position)
filehandle.read([options])
filehandle.read(buffer[, options])
filehandle.readableWebStream([options])
filehandle.readFile(options)
filehandle.readLines([options])
filehandle.readv(buffers[, position])
filehandle.stat([options])
filehandle.sync()
filehandle.truncate(len)
filehandle.utimes(atime, mtime)
filehandle.write(buffer, offset[, length[, position]])
filehandle.write(buffer[, options])
filehandle.write(string[, position[, encoding]])
filehandle.writeFile(data, options)
filehandle.writev(buffers[, position])
filehandle[Symbol.asyncDispose]()
- イベント:
fsPromises.access(path[, mode])
fsPromises.appendFile(path, data[, options])
fsPromises.chmod(path, mode)
fsPromises.chown(path, uid, gid)
fsPromises.copyFile(src, dest[, mode])
fsPromises.cp(src, dest[, options])
fsPromises.lchmod(path, mode)
fsPromises.lchown(path, uid, gid)
fsPromises.lutimes(path, atime, mtime)
fsPromises.link(existingPath, newPath)
fsPromises.lstat(path[, options])
fsPromises.mkdir(path[, options])
fsPromises.mkdtemp(prefix[, options])
fsPromises.open(path, flags[, mode])
fsPromises.opendir(path[, options])
fsPromises.readdir(path[, options])
fsPromises.readFile(path[, options])
fsPromises.readlink(path[, options])
fsPromises.realpath(path[, options])
fsPromises.rename(oldPath, newPath)
fsPromises.rmdir(path[, options])
fsPromises.rm(path[, options])
fsPromises.stat(path[, options])
fsPromises.statfs(path[, options])
fsPromises.symlink(target, path[, type])
fsPromises.truncate(path[, len])
fsPromises.unlink(path)
fsPromises.utimes(path, atime, mtime)
fsPromises.watch(filename[, options])
fsPromises.writeFile(file, data[, options])
fsPromises.constants
- クラス:
- Callback API
fs.access(path[, mode], callback)
fs.appendFile(path, data[, options], callback)
fs.chmod(path, mode, callback)
fs.chown(path, uid, gid, callback)
fs.close(fd[, callback])
fs.copyFile(src, dest[, mode], callback)
fs.cp(src, dest[, options], callback)
fs.createReadStream(path[, options])
fs.createWriteStream(path[, options])
fs.exists(path, callback)
fs.fchmod(fd, mode, callback)
fs.fchown(fd, uid, gid, callback)
fs.fdatasync(fd, callback)
fs.fstat(fd[, options], callback)
fs.fsync(fd, callback)
fs.ftruncate(fd[, len], callback)
fs.futimes(fd, atime, mtime, callback)
fs.lchmod(path, mode, callback)
fs.lchown(path, uid, gid, callback)
fs.lutimes(path, atime, mtime, callback)
fs.link(existingPath, newPath, callback)
fs.lstat(path[, options], callback)
fs.mkdir(path[, options], callback)
fs.mkdtemp(prefix[, options], callback)
fs.open(path[, flags[, mode]], callback)
fs.openAsBlob(path[, options])
fs.opendir(path[, options], callback)
fs.read(fd, buffer, offset, length, position, callback)
fs.read(fd[, options], callback)
fs.read(fd, buffer[, options], callback)
fs.readdir(path[, options], callback)
fs.readFile(path[, options], callback)
fs.readlink(path[, options], callback)
fs.readv(fd, buffers[, position], callback)
fs.realpath(path[, options], callback)
fs.realpath.native(path[, options], callback)
fs.rename(oldPath, newPath, callback)
fs.rmdir(path[, options], callback)
fs.rm(path[, options], callback)
fs.stat(path[, options], callback)
fs.statfs(path[, options], callback)
fs.symlink(target, path[, type], callback)
fs.truncate(path[, len], callback)
fs.unlink(path, callback)
fs.unwatchFile(filename[, listener])
fs.utimes(path, atime, mtime, callback)
fs.watch(filename[, options][, listener])
fs.watchFile(filename[, options], listener)
fs.write(fd, buffer, offset[, length[, position]], callback)
fs.write(fd, buffer[, options], callback)
fs.write(fd, string[, position[, encoding]], callback)
fs.writeFile(file, data[, options], callback)
fs.writev(fd, buffers[, position], callback)
- 同期 API
fs.accessSync(path[, mode])
fs.appendFileSync(path, data[, options])
fs.chmodSync(path, mode)
fs.chownSync(path, uid, gid)
fs.closeSync(fd)
fs.copyFileSync(src, dest[, mode])
fs.cpSync(src, dest[, options])
fs.existsSync(path)
fs.fchmodSync(fd, mode)
fs.fchownSync(fd, uid, gid)
fs.fdatasyncSync(fd)
fs.fstatSync(fd[, options])
fs.fsyncSync(fd)
fs.ftruncateSync(fd[, len])
fs.futimesSync(fd, atime, mtime)
fs.lchmodSync(path, mode)
fs.lchownSync(path, uid, gid)
fs.lutimesSync(path, atime, mtime)
fs.linkSync(existingPath, newPath)
fs.lstatSync(path[, options])
fs.mkdirSync(path[, options])
fs.mkdtempSync(prefix[, options])
fs.opendirSync(path[, options])
fs.openSync(path[, flags[, mode]])
fs.readdirSync(path[, options])
fs.readFileSync(path[, options])
fs.readlinkSync(path[, options])
fs.readSync(fd, buffer, offset, length[, position])
fs.readSync(fd, buffer[, options])
fs.readvSync(fd, buffers[, position])
fs.realpathSync(path[, options])
fs.realpathSync.native(path[, options])
fs.renameSync(oldPath, newPath)
fs.rmdirSync(path[, options])
fs.rmSync(path[, options])
fs.statSync(path[, options])
fs.statfsSync(path[, options])
fs.symlinkSync(target, path[, type])
fs.truncateSync(path[, len])
fs.unlinkSync(path)
fs.utimesSync(path, atime, mtime)
fs.writeFileSync(file, data[, options])
fs.writeSync(fd, buffer, offset[, length[, position]])
fs.writeSync(fd, buffer[, options])
fs.writeSync(fd, string[, position[, encoding]])
fs.writevSync(fd, buffers[, position])
- 共通オブジェクト
- クラス:
fs.Dir
- クラス:
fs.Dirent
- クラス:
fs.FSWatcher
- クラス:
fs.StatWatcher
- クラス:
fs.ReadStream
- クラス:
fs.Stats
stats.isBlockDevice()
stats.isCharacterDevice()
stats.isDirectory()
stats.isFIFO()
stats.isFile()
stats.isSocket()
stats.isSymbolicLink()
stats.dev
stats.ino
stats.mode
stats.nlink
stats.uid
stats.gid
stats.rdev
stats.size
stats.blksize
stats.blocks
stats.atimeMs
stats.mtimeMs
stats.ctimeMs
stats.birthtimeMs
stats.atimeNs
stats.mtimeNs
stats.ctimeNs
stats.birthtimeNs
stats.atime
stats.mtime
stats.ctime
stats.birthtime
- stat の時間値
- クラス:
fs.StatFs
- クラス:
fs.WriteStream
fs.constants
- クラス:
- 注記
- ファイルシステム
-
► インデックス
- アサーションテスト
- 非同期コンテキスト追跡
- Async hooks
- Buffer
- C++ アドオン
- Node-API を使用した C/C++ アドオン
- C++ エンベッダー API
- 子プロセス
- Cluster
- コマンドラインオプション
- Console
- Corepack
- Crypto
- デバッガー
- 非推奨 API
- 診断チャネル
- DNS
- Domain
- エラー
- イベント
- ファイルシステム
- グローバル
- HTTP
- HTTP/2
- HTTPS
- インスペクター
- 国際化
- モジュール: CommonJS モジュール
- モジュール: ECMAScript モジュール
- モジュール:
node:module
API - モジュール: パッケージ
- Net
- OS
- Path
- パフォーマンスフック
- パーミッション
- Process
- Punycode
- クエリストリング
- Readline
- REPL
- Report
- 単一実行可能アプリケーション
- Stream
- 文字列デコーダー
- テストランナー
- タイマー
- TLS/SSL
- トレースイベント
- TTY
- UDP/データグラム
- URL
- ユーティリティ
- V8
- VM
- WASI
- Web Crypto API
- Web Streams API
- ワーカー スレッド
- Zlib
- ► その他のバージョン
- ► オプション
ファイルシステム#
ソースコード: lib/fs.js
node:fs
モジュールは、標準の POSIX 関数をモデルにした方法でファイルシステムと対話できるようにします。
Promise ベースの API を使用するには
import * as fs from 'node:fs/promises';
const fs = require('node:fs/promises');
コールバックおよび同期 API を使用するには
import * as fs from 'node:fs';
const fs = require('node:fs');
すべてのファイルシステム操作には、同期形式、コールバック形式、Promise ベースの形式があり、CommonJS 構文と ES6 モジュール (ESM) の両方を使用してアクセスできます。
Promise の例#
Promise ベースの操作は、非同期操作が完了したときに履行される Promise を返します。
import { unlink } from 'node:fs/promises';
try {
await unlink('/tmp/hello');
console.log('successfully deleted /tmp/hello');
} catch (error) {
console.error('there was an error:', error.message);
}
const { unlink } = require('node:fs/promises');
(async function(path) {
try {
await unlink(path);
console.log(`successfully deleted ${path}`);
} catch (error) {
console.error('there was an error:', error.message);
}
})('/tmp/hello');
コールバックの例#
コールバック形式では、最後の引数として完了コールバック関数を受け取り、操作を非同期的に実行します。完了コールバックに渡される引数はメソッドによって異なりますが、最初の引数は常に例外用に予約されています。操作が正常に完了した場合、最初の引数はnull
またはundefined
になります。
import { unlink } from 'node:fs';
unlink('/tmp/hello', (err) => {
if (err) throw err;
console.log('successfully deleted /tmp/hello');
});
const { unlink } = require('node:fs');
unlink('/tmp/hello', (err) => {
if (err) throw err;
console.log('successfully deleted /tmp/hello');
});
最大パフォーマンス(実行時間とメモリ割り当ての両面で)が要求される場合は、promise APIを使用するよりも、node:fs
モジュールAPIのコールバックベースのバージョンを使用する方が望ましいです。
同期的な例#
同期APIは、操作が完了するまでNode.jsのイベントループとJavaScriptの実行をブロックします。例外はすぐにスローされ、try...catch
を使用して処理するか、バブルアップさせることができます。
import { unlinkSync } from 'node:fs';
try {
unlinkSync('/tmp/hello');
console.log('successfully deleted /tmp/hello');
} catch (err) {
// handle the error
}
const { unlinkSync } = require('node:fs');
try {
unlinkSync('/tmp/hello');
console.log('successfully deleted /tmp/hello');
} catch (err) {
// handle the error
}
Promise API#
fs/promises
APIは、promiseを返す非同期ファイルシステムメソッドを提供します。
promise APIは、基盤となるNode.jsのスレッドプールを使用して、イベントループスレッド外でファイルシステム操作を実行します。これらの操作は同期化されておらず、スレッドセーフではありません。同じファイルに対して複数の同時変更を実行する場合は注意が必要で、データ破損が発生する可能性があります。
クラス: FileHandle
#
<FileHandle>オブジェクトは、数値ファイル記述子のオブジェクトラッパーです。
<FileHandle>オブジェクトのインスタンスは、fsPromises.open()
メソッドによって作成されます。
すべての<FileHandle>オブジェクトは、<EventEmitter>です。
<FileHandle>がfilehandle.close()
メソッドを使用して閉じられない場合、メモリリークを防ぐために、ファイル記述子を自動的に閉じようとし、プロセス警告を発します。これは信頼できない動作であり、ファイルが閉じられない可能性があるため、この動作に依存しないでください。代わりに、常に明示的に<FileHandle>を閉じてください。Node.jsは将来この動作を変更する可能性があります。
イベント: 'close'
#
<FileHandle>が閉じられ、使用できなくなったときに、'close'
イベントが発行されます。
filehandle.appendFile(data[, options])
#
data
<string> | <Buffer> | <TypedArray> | <DataView> | <AsyncIterable> | <Iterable> | <Stream>options
<Object> | <string>- 戻り値: <Promise> 成功時に
undefined
で解決します。
filehandle.writeFile()
のエイリアスです。
ファイルハンドルを操作する場合、モードはfsPromises.open()
で設定されたものから変更できません。したがって、これはfilehandle.writeFile()
と同等です。
filehandle.chmod(mode)
#
ファイルの権限を変更します。chmod(2)
を参照してください。
filehandle.chown(uid, gid)
#
uid
<integer> ファイルの新しい所有者のユーザーID。gid
<integer> ファイルの新しいグループのグループID。- 戻り値: <Promise> 成功時に
undefined
で解決します。
ファイルの所有権を変更します。chown(2)
のラッパーです。
filehandle.close()
#
- 戻り値: <Promise> 成功時に
undefined
で解決します。
ハンドルに対する保留中の操作が完了するのを待ってから、ファイルハンドルを閉じます。
import { open } from 'node:fs/promises';
let filehandle;
try {
filehandle = await open('thefile.txt', 'r');
} finally {
await filehandle?.close();
}
filehandle.createReadStream([options])
#
options
<Object>- 戻り値: <fs.ReadStream>
<stream.Readable>のデフォルトのhighWaterMark
である16KiBとは異なり、このメソッドによって返されるストリームのデフォルトのhighWaterMark
は64KiBです。
options
には、ファイル全体ではなく、ファイルから一定の範囲のバイトを読み取るためのstart
とend
の値を含めることができます。start
とend
の両方は包括的で、0から数え始め、許容される値は[0, Number.MAX_SAFE_INTEGER
]の範囲です。start
が省略されているか、undefined
の場合、filehandle.createReadStream()
は現在のファイル位置から順番に読み取ります。encoding
は、<Buffer>で受け入れられるもののいずれかになります。
FileHandle
が、キーボードやサウンドカードのように、ブロッキング読み取りのみをサポートする文字デバイスを指している場合、データが利用可能になるまで読み取り操作は完了しません。これにより、プロセスの終了やストリームの自然な終了が妨げられる可能性があります。
デフォルトでは、ストリームは破棄された後に'close'
イベントを発行します。この動作を変更するには、emitClose
オプションをfalse
に設定します。
import { open } from 'node:fs/promises';
const fd = await open('/dev/input/event0');
// Create a stream from some character device.
const stream = fd.createReadStream();
setTimeout(() => {
stream.close(); // This may not close the stream.
// Artificially marking end-of-stream, as if the underlying resource had
// indicated end-of-file by itself, allows the stream to close.
// This does not cancel pending read operations, and if there is such an
// operation, the process may still not be able to exit successfully
// until it finishes.
stream.push(null);
stream.read(0);
}, 100);
autoClose
がfalseの場合、エラーが発生した場合でもファイル記述子は閉じられません。それを閉じ、ファイル記述子のリークがないことを確認するのはアプリケーションの責任です。autoClose
がtrue(デフォルトの動作)に設定されている場合、'error'
または'end'
でファイル記述子が自動的に閉じられます。
100バイトのファイルの最後の10バイトを読み取る例
import { open } from 'node:fs/promises';
const fd = await open('sample.txt');
fd.createReadStream({ start: 90, end: 99 });
filehandle.createWriteStream([options])
#
options
<Object>- 戻り値: <fs.WriteStream>
options
には、ファイルの先頭を過ぎた位置にデータを書き込むためのstart
オプションを含めることもできます。許容される値は[0, Number.MAX_SAFE_INTEGER
]の範囲です。ファイルを置き換えるのではなく変更するには、デフォルトのr
ではなくflags
open
オプションをr+
に設定する必要があります。encoding
は、<Buffer>で受け入れられるもののいずれかになります。
autoClose
がtrue(デフォルトの動作)に設定されている場合、'error'
または'finish'
でファイル記述子が自動的に閉じられます。autoClose
がfalseの場合、エラーが発生した場合でもファイル記述子は閉じられません。それを閉じ、ファイル記述子のリークがないことを確認するのはアプリケーションの責任です。
デフォルトでは、ストリームは破棄された後に'close'
イベントを発行します。この動作を変更するには、emitClose
オプションをfalse
に設定します。
filehandle.datasync()
#
- 戻り値: <Promise> 成功時に
undefined
で解決します。
ファイルに関連付けられている現在キューに入れられているすべてのI/O操作を、オペレーティングシステムの同期I/O完了状態に強制します。詳細については、POSIX fdatasync(2)
ドキュメントを参照してください。
filehandle.sync
とは異なり、このメソッドは変更されたメタデータをフラッシュしません。
filehandle.fd
#
- <number> <FileHandle>オブジェクトによって管理される数値ファイル記述子。
filehandle.read(buffer, offset, length, position)
#
buffer
<Buffer> | <TypedArray> | <DataView> 読み取られたファイルデータが入力されるバッファ。offset
<integer> 入力を開始するバッファ内の位置。デフォルト:0
length
<integer> 読み取るバイト数。デフォルト:buffer.byteLength - offset
position
<integer> | <bigint> | <null> ファイルからデータの読み込みを開始する位置。null
または-1
の場合、現在のファイル位置からデータが読み込まれ、位置が更新されます。position
が非負の整数の場合、現在のファイル位置は変更されません。デフォルト:null
- 戻り値: <Promise> 成功時に2つのプロパティを持つオブジェクトで解決されます。
bytesRead
<integer> 読み込まれたバイト数buffer
<Buffer> | <TypedArray> | <DataView> 渡されたbuffer
引数への参照。
ファイルからデータを読み込み、指定されたバッファーに格納します。
ファイルが同時に変更されない場合、読み込まれたバイト数がゼロになったときにファイルの終わりに到達します。
filehandle.read([options])
#
options
<Object>buffer
<Buffer> | <TypedArray> | <DataView> 読み込まれたファイルデータで埋められるバッファー。デフォルト:Buffer.alloc(16384)
offset
<integer> 入力を開始するバッファ内の位置。デフォルト:0
length
<integer> 読み取るバイト数。デフォルト:buffer.byteLength - offset
position
<integer> | <bigint> | <null> ファイルからデータの読み込みを開始する位置。null
または-1
の場合、現在のファイル位置からデータが読み込まれ、位置が更新されます。position
が非負の整数の場合、現在のファイル位置は変更されません。デフォルト:null
- 戻り値: <Promise> 成功時に2つのプロパティを持つオブジェクトで解決されます。
bytesRead
<integer> 読み込まれたバイト数buffer
<Buffer> | <TypedArray> | <DataView> 渡されたbuffer
引数への参照。
ファイルからデータを読み込み、指定されたバッファーに格納します。
ファイルが同時に変更されない場合、読み込まれたバイト数がゼロになったときにファイルの終わりに到達します。
filehandle.read(buffer[, options])
#
buffer
<Buffer> | <TypedArray> | <DataView> 読み取られたファイルデータが入力されるバッファ。options
<Object>- 戻り値: <Promise> 成功時に2つのプロパティを持つオブジェクトで解決されます。
bytesRead
<integer> 読み込まれたバイト数buffer
<Buffer> | <TypedArray> | <DataView> 渡されたbuffer
引数への参照。
ファイルからデータを読み込み、指定されたバッファーに格納します。
ファイルが同時に変更されない場合、読み込まれたバイト数がゼロになったときにファイルの終わりに到達します。
filehandle.readableWebStream([options])
#
-
options
<Object>type
<string> | <undefined> 通常のストリームまたは'bytes'
ストリームを開くかどうか。デフォルト:undefined
-
戻り値: <ReadableStream>
ファイルのデータを読み込むために使用できる ReadableStream
を返します。
このメソッドが複数回呼び出された場合、または FileHandle
が閉じられた後または閉じている途中で呼び出された場合は、エラーがスローされます。
import {
open,
} from 'node:fs/promises';
const file = await open('./some/file/to/read');
for await (const chunk of file.readableWebStream())
console.log(chunk);
await file.close();
const {
open,
} = require('node:fs/promises');
(async () => {
const file = await open('./some/file/to/read');
for await (const chunk of file.readableWebStream())
console.log(chunk);
await file.close();
})();
ReadableStream
はファイルを最後まで読み込みますが、FileHandle
を自動的に閉じません。ユーザーコードは、引き続き fileHandle.close()
メソッドを呼び出す必要があります。
filehandle.readFile(options)
#
options
<Object> | <string>encoding
<string> | <null> デフォルト:null
signal
<AbortSignal> 進行中の readFile を中止できるようにします
- 戻り値: <Promise> ファイルの内容で正常に読み込みが完了すると解決されます。エンコーディングが指定されていない場合(
options.encoding
を使用)、データは <Buffer> オブジェクトとして返されます。それ以外の場合、データは文字列になります。
ファイルの全内容を非同期的に読み込みます。
options
が文字列の場合、それは encoding
を指定します。
<FileHandle> は読み取りをサポートしている必要があります。
1つ以上の filehandle.read()
呼び出しがファイルハンドルに対して行われ、その後 filehandle.readFile()
呼び出しが行われた場合、データは現在の位置からファイルの終わりまで読み込まれます。必ずしもファイルの先頭から読み込まれるわけではありません。
filehandle.readLines([options])
#
options
<Object>- 戻り値: <readline.InterfaceConstructor>
readline
インターフェースを作成し、ファイル全体をストリーム配信するための便利なメソッドです。オプションについては、filehandle.createReadStream()
を参照してください。
import { open } from 'node:fs/promises';
const file = await open('./some/file/to/read');
for await (const line of file.readLines()) {
console.log(line);
}
const { open } = require('node:fs/promises');
(async () => {
const file = await open('./some/file/to/read');
for await (const line of file.readLines()) {
console.log(line);
}
})();
filehandle.readv(buffers[, position])
#
buffers
<Buffer[]> | <TypedArray[]> | <DataView[]>position
<integer> | <null> データの読み取りを開始するファイルの先頭からのオフセット。position
がnumber
でない場合、データは現在の位置から読み込まれます。デフォルト:null
- 戻り値: <Promise> 成功時に、2つのプロパティを含むオブジェクトで解決されます。
bytesRead
<integer> 読み込まれたバイト数buffers
<Buffer[]> | <TypedArray[]> | <DataView[]>buffers
入力への参照を含むプロパティ。
ファイルから読み取り、<ArrayBufferView> の配列に書き込みます。
filehandle.stat([options])
#
options
<Object>bigint
<boolean> 返される <fs.Stats> オブジェクトの数値がbigint
であるべきかどうか。デフォルト:false
。
- 戻り値: <Promise> ファイルの <fs.Stats> で解決されます。
filehandle.sync()
#
- 戻り値: <Promise> 成功時に
undefined
で解決します。
開いているファイル記述子のすべてのデータがストレージデバイスにフラッシュされるように要求します。具体的な実装は、オペレーティングシステムとデバイスに固有です。詳細については、POSIX fsync(2)
ドキュメントを参照してください。
filehandle.truncate(len)
#
ファイルを切り捨てます。
ファイルが len
バイトより大きい場合、ファイルの最初の len
バイトのみが保持されます。
次の例では、ファイルの最初の4バイトのみを保持します。
import { open } from 'node:fs/promises';
let filehandle = null;
try {
filehandle = await open('temp.txt', 'r+');
await filehandle.truncate(4);
} finally {
await filehandle?.close();
}
ファイルが以前に len
バイトより短かった場合は拡張され、拡張された部分はヌルバイト ('\0'
) で埋められます。
len
が負の場合、0
が使用されます。
filehandle.utimes(atime, mtime)
#
<FileHandle> で参照されるオブジェクトのファイルシステムのタイムスタンプを変更し、成功時に引数なしで Promise を解決します。
filehandle.write(buffer, offset[, length[, position]])
#
buffer
<Buffer> | <TypedArray> | <DataView>offset
<integer> 書き込むデータの開始位置がbuffer
内のどこか。length
<integer>buffer
から書き込むバイト数。デフォルト:buffer.byteLength - offset
position
<integer> | <null>buffer
からのデータを書き込むファイルの先頭からのオフセット。position
がnumber
でない場合、データは現在の位置に書き込まれます。詳細については、POSIXpwrite(2)
ドキュメントを参照してください。デフォルト:null
- 戻り値: <Promise>
buffer
をファイルに書き込みます。
Promise は、2つのプロパティを含むオブジェクトで解決されます。
bytesWritten
<integer> 書き込まれたバイト数buffer
<Buffer> | <TypedArray> | <DataView> 書き込まれたbuffer
への参照。
Promise が解決 (または拒否) されるのを待たずに、同じファイルで filehandle.write()
を複数回使用するのは安全ではありません。このシナリオでは、filehandle.createWriteStream()
を使用してください。
Linux では、ファイルが追加モードで開かれている場合、位置指定書き込みは機能しません。カーネルは position 引数を無視し、常にデータの最後にデータを追加します。
filehandle.write(buffer[, options])
#
buffer
<Buffer> | <TypedArray> | <DataView>options
<Object>- 戻り値: <Promise>
buffer
をファイルに書き込みます。
上記の filehandle.write
関数と同様に、このバージョンではオプションの options
オブジェクトを受け取ります。options
オブジェクトが指定されていない場合、上記の値がデフォルトになります。
filehandle.write(string[, position[, encoding]])
#
string
<string>position
<整数> | <null>string
からのデータを書き込むファイルの先頭からのオフセットです。position
がnumber
でない場合、データは現在の位置に書き込まれます。詳細については、POSIX のpwrite(2)
ドキュメントを参照してください。デフォルト:null
encoding
<文字列> 予期される文字列エンコーディングです。デフォルト:'utf8'
- 戻り値: <Promise>
string
をファイルに書き込みます。string
が文字列でない場合、Promise はエラーでリジェクトされます。
Promise は、2つのプロパティを含むオブジェクトで解決されます。
Promise が解決 (または拒否) されるのを待たずに、同じファイルで filehandle.write()
を複数回使用するのは安全ではありません。このシナリオでは、filehandle.createWriteStream()
を使用してください。
Linux では、ファイルが追加モードで開かれている場合、位置指定書き込みは機能しません。カーネルは position 引数を無視し、常にデータの最後にデータを追加します。
filehandle.writeFile(data, options)
#
data
<string> | <Buffer> | <TypedArray> | <DataView> | <AsyncIterable> | <Iterable> | <Stream>options
<Object> | <string>- 戻り値: <Promise>
非同期的にデータをファイルに書き込みます。ファイルが既に存在する場合は上書きします。data
は、文字列、バッファー、<AsyncIterable>、または <Iterable> オブジェクトにすることができます。Promise は成功時に引数なしで解決されます。
options
が文字列の場合、それは encoding
を指定します。
<FileHandle> は書き込みをサポートする必要があります。
Promise が解決 (またはリジェクト) されるのを待たずに、同じファイルに対して filehandle.writeFile()
を複数回使用するのは安全ではありません。
ファイルハンドルに対して 1 回以上の filehandle.write()
呼び出しが行われた後で filehandle.writeFile()
呼び出しが行われた場合、データは現在の位置からファイルの最後まで書き込まれます。必ずしもファイルの先頭から書き込まれるとは限りません。
filehandle.writev(buffers[, position])
#
buffers
<Buffer[]> | <TypedArray[]> | <DataView[]>position
<整数> | <null>buffers
からのデータを書き込むファイルの先頭からのオフセットです。position
がnumber
でない場合、データは現在の位置に書き込まれます。デフォルト:null
- 戻り値: <Promise>
<ArrayBufferView> の配列をファイルに書き込みます。
Promise は、2 つのプロパティを含むオブジェクトで解決されます。
bytesWritten
<integer> 書き込まれたバイト数buffers
<Buffer[]> | <TypedArray[]> | <DataView[]>buffers
入力への参照です。
Promise が解決 (またはリジェクト) されるのを待たずに、同じファイルに対して writev()
を複数回呼び出すのは安全ではありません。
Linux では、ファイルが追加モードで開かれている場合、位置指定書き込みは機能しません。カーネルは position 引数を無視し、常にデータの末尾に追加します。
filehandle[Symbol.asyncDispose]()
#
filehandle.close()
のエイリアスです。
fsPromises.access(path[, mode])
#
path
<文字列> | <Buffer> | <URL>mode
<整数> デフォルト:fs.constants.F_OK
- 戻り値: <Promise> 成功時に
undefined
で解決します。
path
で指定されたファイルまたはディレクトリに対するユーザーのアクセス許可をテストします。mode
引数は、実行するアクセス可能性チェックを指定するオプションの整数です。mode
は、fs.constants.F_OK
の値または、fs.constants.R_OK
、fs.constants.W_OK
、および fs.constants.X_OK
のいずれかのビット単位の OR で構成されるマスクのいずれかである必要があります (例: fs.constants.W_OK | fs.constants.R_OK
)。mode
の可能な値については、ファイルアクセス定数を確認してください。
アクセス可能性チェックが成功した場合、Promise は値なしで解決されます。アクセス可能性チェックのいずれかが失敗した場合、Promise は <エラー> オブジェクトでリジェクトされます。次の例では、ファイル /etc/passwd
を現在のプロセスで読み取りおよび書き込みできるかどうかを確認します。
import { access, constants } from 'node:fs/promises';
try {
await access('/etc/passwd', constants.R_OK | constants.W_OK);
console.log('can access');
} catch {
console.error('cannot access');
}
fsPromises.open()
を呼び出す前にファイルのアクセス可能性を確認するために fsPromises.access()
を使用することはお勧めしません。そうすると、他のプロセスが 2 回の呼び出しの間でファイルの状態を変更する可能性があるため、競合状態が発生します。代わりに、ユーザーコードはファイルを直接開く/読み取り/書き込みし、ファイルにアクセスできない場合に発生するエラーを処理する必要があります。
fsPromises.appendFile(path, data[, options])
#
path
<文字列> | <Buffer> | <URL> | <FileHandle> ファイル名または <FileHandle>data
<文字列> | <Buffer>options
<Object> | <string>- 戻り値: <Promise> 成功時に
undefined
で解決します。
非同期的にデータをファイルに追加し、ファイルが存在しない場合は作成します。data
は、文字列または <Buffer> にすることができます。
options
が文字列の場合、それは encoding
を指定します。
mode
オプションは、新しく作成されたファイルにのみ影響します。詳細については、fs.open()
を参照してください。
path
は、追加用に開かれた (fsPromises.open()
を使用) <FileHandle> として指定できます。
fsPromises.chmod(path, mode)
#
ファイルの権限を変更します。
fsPromises.chown(path, uid, gid)
#
ファイルの所有権を変更します。
fsPromises.copyFile(src, dest[, mode])
#
src
<文字列> | <Buffer> | <URL> コピー元のファイル名dest
<文字列> | <Buffer> | <URL> コピー操作のコピー先のファイル名mode
<整数> コピー操作の動作を指定するオプションの修飾子。2 つ以上の値のビット単位の OR で構成されるマスクを作成できます (例:fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE
)。デフォルト:0
。fs.constants.COPYFILE_EXCL
:dest
が既に存在する場合、コピー操作は失敗します。fs.constants.COPYFILE_FICLONE
: コピー操作は、コピーオンライトの reflink を作成しようとします。プラットフォームがコピーオンライトをサポートしていない場合は、フォールバックコピーメカニズムが使用されます。fs.constants.COPYFILE_FICLONE_FORCE
: コピー操作は、コピーオンライトの reflink を作成しようとします。プラットフォームがコピーオンライトをサポートしていない場合、操作は失敗します。
- 戻り値: <Promise> 成功時に
undefined
で解決します。
非同期的に src
を dest
にコピーします。デフォルトでは、dest
が既に存在する場合は上書きされます。
コピー操作のアトミシティについては保証されていません。コピー先のファイルが書き込みのために開かれた後でエラーが発生した場合は、コピー先の削除が試行されます。
import { copyFile, constants } from 'node:fs/promises';
try {
await copyFile('source.txt', 'destination.txt');
console.log('source.txt was copied to destination.txt');
} catch {
console.error('The file could not be copied');
}
// By using COPYFILE_EXCL, the operation will fail if destination.txt exists.
try {
await copyFile('source.txt', 'destination.txt', constants.COPYFILE_EXCL);
console.log('source.txt was copied to destination.txt');
} catch {
console.error('The file could not be copied');
}
fsPromises.cp(src, dest[, options])
#
src
<文字列> | <URL> コピー元のパス。dest
<文字列> | <URL> コピー先のパス。options
<Object>dereference
<真偽値> シンボリックリンクを非参照化します。デフォルト:false
。errorOnExist
<真偽値>force
がfalse
で、コピー先が存在する場合、エラーをスローします。デフォルト:false
。filter
<関数> コピーされたファイル/ディレクトリをフィルタリングする関数。項目をコピーする場合はtrue
を返し、無視する場合はfalse
を返します。ディレクトリを無視すると、そのすべての内容もスキップされます。true
またはfalse
に解決されるPromise
を返すこともできます。デフォルト:undefined
。force
<真偽値> 既存のファイルまたはディレクトリを上書きします。この値を false に設定し、コピー先が存在する場合、コピー操作はエラーを無視します。この動作を変更するには、errorOnExist
オプションを使用します。デフォルト:true
。mode
<整数> コピー操作の修飾子。デフォルト:0
。fsPromises.copyFile()
のmode
フラグを参照してください。preserveTimestamps
<真偽値>true
の場合、src
からのタイムスタンプが保持されます。デフォルト:false
。recursive
<boolean> ディレクトリを再帰的にコピーします。デフォルト:false
verbatimSymlinks
<boolean>true
の場合、シンボリックリンクのパス解決をスキップします。デフォルト:false
- 戻り値: <Promise> 成功時に
undefined
で解決します。
src
から dest
へ、サブディレクトリやファイルを含むディレクトリ構造全体を非同期にコピーします。
あるディレクトリを別のディレクトリへコピーする場合、glob はサポートされず、cp dir1/ dir2/
と同様の動作になります。
fsPromises.lchmod(path, mode)
#
シンボリックリンクのパーミッションを変更します。
このメソッドは macOS でのみ実装されています。
fsPromises.lchown(path, uid, gid)
#
シンボリックリンクの所有権を変更します。
fsPromises.lutimes(path, atime, mtime)
#
path
<文字列> | <Buffer> | <URL>atime
<number> | <string> | <Date>mtime
<number> | <string> | <Date>- 戻り値: <Promise> 成功時に
undefined
で解決します。
fsPromises.utimes()
と同様にファイルのアクセス時間と変更時間を変更しますが、パスがシンボリックリンクを参照する場合、リンクは間接参照されません。代わりに、シンボリックリンク自体のタイムスタンプが変更されます。
fsPromises.link(existingPath, newPath)
#
existingPath
<string> | <Buffer> | <URL>newPath
<string> | <Buffer> | <URL>- 戻り値: <Promise> 成功時に
undefined
で解決します。
existingPath
から newPath
への新しいリンクを作成します。詳細については、POSIX の link(2)
ドキュメントを参照してください。
fsPromises.lstat(path[, options])
#
path
<文字列> | <Buffer> | <URL>options
<Object>bigint
<boolean> 返される <fs.Stats> オブジェクトの数値がbigint
であるべきかどうか。デフォルト:false
。
- 戻り値: <Promise> 指定されたシンボリックリンクの
path
に対する <fs.Stats> オブジェクトで解決されます。
path
がシンボリックリンクを参照する場合を除き、fsPromises.stat()
と同等です。その場合、参照先のファイルではなくリンク自体が stat されます。詳細については、POSIX の lstat(2)
ドキュメントを参照してください。
fsPromises.mkdir(path[, options])
#
path
<文字列> | <Buffer> | <URL>options
<Object> | <integer>- 戻り値: <Promise> 成功した場合、
recursive
がfalse
の場合はundefined
で解決され、recursive
がtrue
の場合は最初に作成されたディレクトリパスで解決されます。
非同期的にディレクトリを作成します。
オプションの options
引数には、mode
(パーミッションとスティッキービット) を指定する整数、または親ディレクトリを作成するかどうかを示す mode
プロパティと recursive
プロパティを持つオブジェクトを指定できます。path
が存在するディレクトリであるときに fsPromises.mkdir()
を呼び出すと、recursive
が false の場合にのみ拒否されます。
import { mkdir } from 'node:fs/promises';
try {
const projectFolder = new URL('./test/project/', import.meta.url);
const createDir = await mkdir(projectFolder, { recursive: true });
console.log(`created ${createDir}`);
} catch (err) {
console.error(err.message);
}
const { mkdir } = require('node:fs/promises');
const { join } = require('node:path');
async function makeDirectory() {
const projectFolder = join(__dirname, 'test', 'project');
const dirCreation = await mkdir(projectFolder, { recursive: true });
console.log(dirCreation);
return dirCreation;
}
makeDirectory().catch(console.error);
fsPromises.mkdtemp(prefix[, options])
#
prefix
<string> | <Buffer> | <URL>options
<string> | <Object>encoding
<string> デフォルト:'utf8'
- 戻り値: <Promise> 新しく作成された一時ディレクトリのファイルシステムパスを含む文字列で解決されます。
一意の一時ディレクトリを作成します。一意のディレクトリ名は、指定された prefix
の末尾に 6 つのランダムな文字を追加することで生成されます。プラットフォームの不整合のため、prefix
の末尾に X
文字を使用しないでください。一部のプラットフォーム (特に BSD) では、6 つ以上のランダムな文字を返し、prefix
の末尾の X
文字をランダムな文字に置き換えることができます。
オプションの options
引数には、エンコーディングを指定する文字列、または使用する文字エンコーディングを指定する encoding
プロパティを持つオブジェクトを指定できます。
import { mkdtemp } from 'node:fs/promises';
import { join } from 'node:path';
import { tmpdir } from 'node:os';
try {
await mkdtemp(join(tmpdir(), 'foo-'));
} catch (err) {
console.error(err);
}
fsPromises.mkdtemp()
メソッドは、6 つのランダムに選択された文字を prefix
文字列に直接追加します。たとえば、ディレクトリ /tmp
がある場合、/tmp
*内* に一時ディレクトリを作成するつもりである場合、prefix
は末尾にプラットフォーム固有のパス区切り文字 (require('node:path').sep
) を付ける必要があります。
fsPromises.open(path, flags[, mode])
#
path
<文字列> | <Buffer> | <URL>flags
<string> | <number> ファイルシステムのflags
のサポート を参照してください。デフォルト:'r'
。mode
<string> | <integer> ファイルが作成される場合、ファイルモード(パーミッションとスティッキービット)を設定します。デフォルト:0o666
(読み取りおよび書き込み可能)- 戻り値: <Promise> <FileHandle> オブジェクトで解決されます。
<FileHandle> を開きます。
詳細については、POSIX の open(2)
ドキュメントを参照してください。
一部の文字 (< > : " / \ | ? *
) は、ファイル、パス、名前空間の命名 に記載されているように、Windows で予約されています。NTFS では、ファイル名にコロンが含まれている場合、Node.js は この MSDN ページ に記載されているように、ファイルシステムストリームを開きます。
fsPromises.opendir(path[, options])
#
path
<文字列> | <Buffer> | <URL>options
<Object>encoding
<string> | <null> デフォルト:'utf8'
bufferSize
<number> ディレクトリから読み取るときに内部的にバッファリングされるディレクトリエントリの数。値を大きくするとパフォーマンスは向上しますが、メモリ使用量も増加します。デフォルト:32
recursive
<boolean> 解決されたDir
は、すべてのサブファイルとディレクトリを含む <AsyncIterable> になります。デフォルト:false
- 戻り値: <Promise> <fs.Dir> で解決されます。
反復スキャン用にディレクトリを非同期に開きます。詳細については、POSIX の opendir(3)
ドキュメントを参照してください。
<fs.Dir> を作成します。これには、ディレクトリからの読み取りとクリーンアップのすべての追加機能が含まれています。
encoding
オプションは、ディレクトリを開く際と、後続の読み取り操作時の path
のエンコーディングを設定します。
非同期イテレーションを使用する例
import { opendir } from 'node:fs/promises';
try {
const dir = await opendir('./');
for await (const dirent of dir)
console.log(dirent.name);
} catch (err) {
console.error(err);
}
非同期イテレータを使用する場合、イテレータが終了した後、<fs.Dir> オブジェクトは自動的に閉じられます。
fsPromises.readdir(path[, options])
#
path
<文字列> | <Buffer> | <URL>options
<string> | <Object>- 戻り値: <Promise> ディレクトリ内のファイルの名前の配列(
'.'
および'..'
を除く)で解決されます。
ディレクトリの内容を読み取ります。
オプションの options
引数には、エンコーディングを指定する文字列、またはファイル名に使用する文字エンコーディングを指定する encoding
プロパティを持つオブジェクトを指定できます。encoding
が 'buffer'
に設定されている場合、返されるファイル名は <Buffer> オブジェクトとして渡されます。
options.withFileTypes
が true
に設定されている場合、返される配列には <fs.Dirent> オブジェクトが含まれます。
import { readdir } from 'node:fs/promises';
try {
const files = await readdir(path);
for (const file of files)
console.log(file);
} catch (err) {
console.error(err);
}
fsPromises.readFile(path[, options])
#
path
<string> | <Buffer> | <URL> | <FileHandle> ファイル名またはFileHandle
options
<Object> | <string>encoding
<string> | <null> デフォルト:null
flag
<string> ファイルシステムのflags
のサポート を参照してください。デフォルト:'r'
。signal
<AbortSignal> 進行中の readFile を中止できるようにします
- 戻り値: <Promise> ファイルの内容で解決されます。
ファイルの全内容を非同期的に読み込みます。
エンコーディングが指定されていない場合 (options.encoding
を使用)、データは <Buffer> オブジェクトとして返されます。それ以外の場合、データは文字列になります。
options
が文字列の場合、それはエンコーディングを指定します。
path
がディレクトリの場合、fsPromises.readFile()
の動作はプラットフォームに依存します。macOS、Linux、および Windows では、Promise はエラーで拒否されます。FreeBSD では、ディレクトリの内容の表現が返されます。
実行中のコードと同じディレクトリにある package.json
ファイルを読み込む例
import { readFile } from 'node:fs/promises';
try {
const filePath = new URL('./package.json', import.meta.url);
const contents = await readFile(filePath, { encoding: 'utf8' });
console.log(contents);
} catch (err) {
console.error(err.message);
}
const { readFile } = require('node:fs/promises');
const { resolve } = require('node:path');
async function logFile() {
try {
const filePath = resolve('./package.json');
const contents = await readFile(filePath, { encoding: 'utf8' });
console.log(contents);
} catch (err) {
console.error(err.message);
}
}
logFile();
<AbortSignal> を使用して、進行中の readFile
を中止することができます。リクエストが中止された場合、返される Promise は AbortError
で拒否されます。
import { readFile } from 'node:fs/promises';
try {
const controller = new AbortController();
const { signal } = controller;
const promise = readFile(fileName, { signal });
// Abort the request before the promise settles.
controller.abort();
await promise;
} catch (err) {
// When a request is aborted - err is an AbortError
console.error(err);
}
進行中のリクエストを中止しても、個々のオペレーティングシステムのリクエストが中止されるのではなく、内部バッファリングである fs.readFile
の実行が中止されます。
指定された <FileHandle> は、読み取りをサポートしている必要があります。
fsPromises.readlink(path[, options])
#
path
<文字列> | <Buffer> | <URL>options
<string> | <Object>encoding
<string> デフォルト:'utf8'
- 戻り値: <Promise> 成功時に
linkString
で解決します。
path
で参照されるシンボリックリンクの内容を読み取ります。詳細については、POSIX の readlink(2)
ドキュメントを参照してください。Promise は、成功時に linkString
で解決します。
オプションの options
引数には、エンコーディングを指定する文字列、または、返されるリンクパスに使用する文字エンコーディングを指定する encoding
プロパティを持つオブジェクトを指定できます。encoding
が 'buffer'
に設定されている場合、返されるリンクパスは <Buffer> オブジェクトとして渡されます。
fsPromises.realpath(path[, options])
#
path
<文字列> | <Buffer> | <URL>options
<string> | <Object>encoding
<string> デフォルト:'utf8'
- 戻り値: <Promise> 成功時に解決されたパスで解決します。
fs.realpath.native()
関数と同じセマンティクスを使用して、path
の実際の場所を決定します。
UTF8 文字列に変換できるパスのみがサポートされています。
オプションの options
引数には、エンコーディングを指定する文字列、または、パスに使用する文字エンコーディングを指定する encoding
プロパティを持つオブジェクトを指定できます。encoding
が 'buffer'
に設定されている場合、返されるパスは <Buffer> オブジェクトとして渡されます。
Linux では、Node.js が musl libc にリンクされている場合、この関数が動作するためには、procfs ファイルシステムが /proc
にマウントされている必要があります。Glibc にはこの制限はありません。
fsPromises.rename(oldPath, newPath)
#
oldPath
<string> | <Buffer> | <URL>newPath
<string> | <Buffer> | <URL>- 戻り値: <Promise> 成功時に
undefined
で解決します。
oldPath
を newPath
に名前変更します。
fsPromises.rmdir(path[, options])
#
path
<文字列> | <Buffer> | <URL>options
<Object>maxRetries
<integer>EBUSY
、EMFILE
、ENFILE
、ENOTEMPTY
、またはEPERM
エラーが発生した場合、Node.js は、試行ごとにretryDelay
ミリ秒ずつ長く線形バックオフ待機で操作を再試行します。このオプションは、再試行の回数を表します。このオプションは、recursive
オプションがtrue
でない場合は無視されます。デフォルト:0
。recursive
<boolean>true
の場合、再帰的なディレクトリ削除を実行します。再帰モードでは、操作は失敗時に再試行されます。デフォルト:false
。非推奨。retryDelay
<integer> 再試行の間隔をミリ秒単位で指定します。このオプションは、recursive
オプションがtrue
でない場合は無視されます。デフォルト:100
。
- 戻り値: <Promise> 成功時に
undefined
で解決します。
path
で識別されるディレクトリを削除します。
ファイル (ディレクトリではない) に対して fsPromises.rmdir()
を使用すると、Windows では ENOENT
エラー、POSIX では ENOTDIR
エラーが発生して Promise が拒否されます。
rm -rf
Unix コマンドと同様の動作を実現するには、{ recursive: true, force: true }
オプションを指定して fsPromises.rm()
を使用します。
fsPromises.rm(path[, options])
#
path
<文字列> | <Buffer> | <URL>options
<Object>force
<boolean>true
の場合、path
が存在しない場合は例外が無視されます。デフォルト:false
。maxRetries
<integer>EBUSY
、EMFILE
、ENFILE
、ENOTEMPTY
、またはEPERM
エラーが発生した場合、Node.js は、試行ごとにretryDelay
ミリ秒ずつ長く線形バックオフ待機で操作を再試行します。このオプションは、再試行の回数を表します。このオプションは、recursive
オプションがtrue
でない場合は無視されます。デフォルト:0
。recursive
<boolean>true
の場合、再帰的なディレクトリ削除を実行します。再帰モードでは、操作は失敗時に再試行されます。デフォルト:false
。retryDelay
<integer> 再試行の間隔をミリ秒単位で指定します。このオプションは、recursive
オプションがtrue
でない場合は無視されます。デフォルト:100
。
- 戻り値: <Promise> 成功時に
undefined
で解決します。
ファイルとディレクトリを削除します (標準 POSIX rm
ユーティリティをモデルにしています)。
fsPromises.stat(path[, options])
#
path
<文字列> | <Buffer> | <URL>options
<Object>bigint
<boolean> 返される <fs.Stats> オブジェクトの数値がbigint
であるべきかどうか。デフォルト:false
。
- 戻り値: <Promise> 指定された
path
の <fs.Stats> オブジェクトで解決します。
fsPromises.statfs(path[, options])
#
path
<文字列> | <Buffer> | <URL>options
<Object>bigint
<boolean> 返される <fs.StatFs> オブジェクトの数値がbigint
であるかどうか。デフォルト:false
。
- 戻り値: <Promise> 指定された
path
の <fs.StatFs> オブジェクトで解決します。
fsPromises.symlink(target, path[, type])
#
target
<string> | <Buffer> | <URL>path
<文字列> | <Buffer> | <URL>type
<string> | <null> デフォルト:null
- 戻り値: <Promise> 成功時に
undefined
で解決します。
シンボリックリンクを作成します。
type
引数は、Windows プラットフォームでのみ使用され、'dir'
、'file'
、または 'junction'
のいずれかになります。type
引数が文字列でない場合、Node.js は target
のタイプを自動検出し、'file'
または 'dir'
を使用します。target
が存在しない場合は、'file'
が使用されます。Windows のジャンクションポイントには、絶対パスの宛先パスが必要です。'junction'
を使用する場合、target
引数は自動的に絶対パスに正規化されます。NTFS ボリュームのジャンクションポイントは、ディレクトリのみを指すことができます。
fsPromises.truncate(path[, len])
#
path
のコンテンツを len
バイトに切り詰めます (短縮または延長)。
fsPromises.unlink(path)
#
path
がシンボリックリンクを参照している場合、リンクが参照しているファイルまたはディレクトリに影響を与えることなくリンクが削除されます。path
がシンボリックリンクではないファイルパスを参照している場合、ファイルは削除されます。詳細については、POSIX の unlink(2)
ドキュメントを参照してください。
fsPromises.utimes(path, atime, mtime)
#
path
<文字列> | <Buffer> | <URL>atime
<number> | <string> | <Date>mtime
<number> | <string> | <Date>- 戻り値: <Promise> 成功時に
undefined
で解決します。
path
で参照されるオブジェクトのファイルシステムタイムスタンプを変更します。
atime
および mtime
引数は、次のルールに従います。
- 値には、Unix エポック時間を表す数値、
Date
、または'123456789.0'
のような数値文字列を使用できます。 - 値を数値に変換できない場合、または
NaN
、Infinity
、または-Infinity
の場合は、Error
がスローされます。
fsPromises.watch(filename[, options])
#
filename
<string> | <Buffer> | <URL>options
<string> | <Object>persistent
<boolean> ファイルが監視されている間、プロセスを実行し続けるかどうかを示します。デフォルト:true
。recursive
<boolean> すべてのサブディレクトリを監視するか、現在のディレクトリのみを監視するかを示します。これは、ディレクトリが指定されている場合に適用され、サポートされているプラットフォームでのみ適用されます(注意点を参照)。デフォルト:false
。encoding
<string> リスナーに渡されるファイル名に使用する文字エンコーディングを指定します。デフォルト:'utf8'
。signal
<AbortSignal> ウォッチャーを停止するタイミングを通知するために使用される<AbortSignal>。
- 戻り値: プロパティを持つオブジェクトの<AsyncIterator>
filename
(ファイルまたはディレクトリ)の変更を監視する非同期イテレータを返します。
const { watch } = require('node:fs/promises');
const ac = new AbortController();
const { signal } = ac;
setTimeout(() => ac.abort(), 10000);
(async () => {
try {
const watcher = watch(__filename, { signal });
for await (const event of watcher)
console.log(event);
} catch (err) {
if (err.name === 'AbortError')
return;
throw err;
}
})();
ほとんどのプラットフォームでは、ディレクトリ内でファイル名が表示または非表示になるたびに、'rename'
が発行されます。
fs.watch()
の注意点はすべてfsPromises.watch()
にも適用されます。
fsPromises.writeFile(file, data[, options])
#
file
<string> | <Buffer> | <URL> | <FileHandle> ファイル名またはFileHandle
data
<string> | <Buffer> | <TypedArray> | <DataView> | <AsyncIterable> | <Iterable> | <Stream>options
<Object> | <string>encoding
<string> | <null> デフォルト:'utf8'
mode
<整数> デフォルト:0o666
flag
<string> ファイルシステムのflags
のサポートを参照してください。デフォルト:'w'
。flush
<boolean> すべてのデータがファイルに正常に書き込まれ、flush
がtrue
の場合、filehandle.sync()
がデータのフラッシュに使用されます。デフォルト:false
。signal
<AbortSignal> 進行中のwriteFileを中止できます。
- 戻り値: <Promise> 成功時に
undefined
で解決します。
非同期的にデータをファイルに書き込み、ファイルが存在する場合は置き換えます。data
には、文字列、バッファー、<AsyncIterable>、または<Iterable>オブジェクトを指定できます。
data
がバッファーの場合、encoding
オプションは無視されます。
options
が文字列の場合、それはエンコーディングを指定します。
mode
オプションは、新しく作成されたファイルにのみ影響します。詳細については、fs.open()
を参照してください。
指定された<FileHandle>は、書き込みをサポートしている必要があります。
プロミスが解決されるのを待たずに、同じファイルに対してfsPromises.writeFile()
を複数回使用することは安全ではありません。
fsPromises.readFile
と同様に、fsPromises.writeFile
は、渡されたバッファーを書き込むために内部で複数のwrite
呼び出しを実行する便利なメソッドです。パフォーマンスが重要なコードの場合は、fs.createWriteStream()
またはfilehandle.createWriteStream()
の使用を検討してください。
<AbortSignal>を使用してfsPromises.writeFile()
をキャンセルできます。キャンセルは「ベストエフォート」であり、ある程度のデータは書き込まれる可能性があります。
import { writeFile } from 'node:fs/promises';
import { Buffer } from 'node:buffer';
try {
const controller = new AbortController();
const { signal } = controller;
const data = new Uint8Array(Buffer.from('Hello Node.js'));
const promise = writeFile('message.txt', data, { signal });
// Abort the request before the promise settles.
controller.abort();
await promise;
} catch (err) {
// When a request is aborted - err is an AbortError
console.error(err);
}
進行中のリクエストを中止しても、個々のオペレーティングシステムのリクエストは中止されず、fs.writeFile
が実行する内部バッファリングが中止されます。
fsPromises.constants
#
ファイルシステム操作で一般的に使用される定数を含むオブジェクトを返します。オブジェクトはfs.constants
と同じです。詳細については、FS定数を参照してください。
コールバックAPI#
コールバックAPIは、イベントループをブロックせずにすべて非同期的に操作を実行し、完了またはエラー時にコールバック関数を呼び出します。
コールバックAPIは、基盤となるNode.jsスレッドプールを使用して、イベントループスレッドから離れた場所でファイルシステム操作を実行します。これらの操作は同期されておらず、スレッドセーフではありません。同じファイルに対して複数の同時変更を実行する場合は、データが破損する可能性があるため、注意が必要です。
fs.access(path[, mode], callback)
#
path
で指定されたファイルまたはディレクトリに対するユーザーのアクセス許可をテストします。mode
引数は、実行するアクセス可能性チェックを指定するオプションの整数です。mode
は、fs.constants.F_OK
の値または、fs.constants.R_OK
、fs.constants.W_OK
、および fs.constants.X_OK
のいずれかのビット単位の OR で構成されるマスクのいずれかである必要があります (例: fs.constants.W_OK | fs.constants.R_OK
)。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.access()
を使用して、fs.open()
、fs.readFile()
、またはfs.writeFile()
を呼び出す前にファイルのアクセシビリティをチェックしないでください。そうすると、他のプロセスが2つの呼び出しの間にファイルの状態を変更する可能性があるため、競合状態が発生します。代わりに、ユーザーコードはファイルを直接開く/読み取り/書き込みし、ファイルにアクセスできない場合に発生するエラーを処理する必要があります。
書き込み(非推奨)
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;
});
}
});
上記の「非推奨」の例では、アクセシビリティをチェックしてからファイルを使用しています。「推奨」の例の方が、ファイルを直接使用してエラー(ある場合)を処理するため、より適切です。
一般に、ファイルを使用しない場合、たとえば、そのアクセシビリティが別のプロセスからの信号である場合にのみ、ファイルのアクセシビリティをチェックしてください。
Windowsでは、ディレクトリのアクセス制御ポリシー(ACL)によって、ファイルまたはディレクトリへのアクセスが制限される場合があります。ただし、fs.access()
関数はACLをチェックしないため、ACLによってユーザーが読み取りまたは書き込みを制限されている場合でも、パスにアクセス可能であると報告する場合があります。
fs.appendFile(path, data[, options], callback)
#
path
<string> | <Buffer> | <URL> | <number> ファイル名またはファイルディスクリプターdata
<文字列> | <Buffer>options
<Object> | <string>callback
<Function>err
<Error>
非同期的にデータをファイルに追加し、ファイルが存在しない場合は作成します。data
は、文字列または <Buffer> にすることができます。
mode
オプションは、新しく作成されたファイルにのみ影響します。詳細については、fs.open()
を参照してください。
import { appendFile } from 'node:fs';
appendFile('message.txt', 'data to append', (err) => {
if (err) throw err;
console.log('The "data to append" was appended to file!');
});
options
が文字列の場合、エンコーディングを指定します。
import { appendFile } from 'node:fs';
appendFile('message.txt', 'data to append', 'utf8', callback);
path
は、(fs.open()
またはfs.openSync()
を使用して)追加用に開かれている数値ファイルディスクリプターとして指定できます。ファイルディスクリプターは自動的に閉じられません。
import { open, close, appendFile } from 'node:fs';
function closeFd(fd) {
close(fd, (err) => {
if (err) throw err;
});
}
open('message.txt', 'a', (err, fd) => {
if (err) throw err;
try {
appendFile(fd, 'data to append', 'utf8', (err) => {
closeFd(fd);
if (err) throw err;
});
} catch (err) {
closeFd(fd);
throw err;
}
});
fs.chmod(path, mode, callback)
#
ファイルの権限を非同期的に変更します。完了コールバックには、発生する可能性のある例外以外の引数は渡されません。
詳細については、POSIX chmod(2)
のドキュメントを参照してください。
import { chmod } from 'node:fs';
chmod('my_file.txt', 0o775, (err) => {
if (err) throw err;
console.log('The permissions for file "my_file.txt" have been changed!');
});
ファイルモード#
fs.chmod()
メソッドとfs.chmodSync()
メソッドの両方で使用されるmode
引数は、次の定数の論理ORを使用して作成された数値ビットマスクです。
定数 | 8進数 | 説明 |
---|---|---|
fs.constants.S_IRUSR | 0o400 | 所有者による読み取り |
fs.constants.S_IWUSR | 0o200 | 所有者による書き込み |
fs.constants.S_IXUSR | 0o100 | 所有者による実行/検索 |
fs.constants.S_IRGRP | 0o40 | グループによる読み取り |
fs.constants.S_IWGRP | 0o20 | グループによる書き込み |
fs.constants.S_IXGRP | 0o10 | グループによる実行/検索 |
fs.constants.S_IROTH | 0o4 | 他のユーザーによる読み取り |
fs.constants.S_IWOTH | 0o2 | 他のユーザーによる書き込み |
fs.constants.S_IXOTH | 0o1 | 他のユーザーによる実行/検索 |
mode
を構築する簡単な方法は、3つの8進数(例:765
)のシーケンスを使用することです。左端の数字(例では7
)は、ファイルの所有者の権限を指定します。中央の数字(例では6
)は、グループの権限を指定します。右端の数字(例では5
)は、他のユーザーの権限を指定します。
番号 | 説明 |
---|---|
7 | 読み取り、書き込み、実行 |
6 | 読み取りと書き込み |
5 | 読み取りと実行 |
4 | 読み取り専用 |
3 | 書き込みと実行 |
2 | 書き込み専用 |
1 | 実行専用 |
0 | 権限なし |
たとえば、8進数値0o765
は次のことを意味します。
- 所有者はファイルの読み取り、書き込み、および実行ができます。
- グループはファイルの読み取りと書き込みができます。
- 他のユーザーはファイルの読み取りと実行ができます。
ファイルモードが予期される場所で生の数値を使用する場合、0o777
より大きい値を使用すると、一貫して機能するようにサポートされていないプラットフォーム固有の動作が発生する可能性があります。したがって、S_ISVTX
、S_ISGID
、またはS_ISUID
のような定数はfs.constants
で公開されていません。
注意点: Windowsでは、書き込み権限のみを変更でき、グループ、所有者、または他のユーザーの権限の区別は実装されていません。
fs.chown(path, uid, gid, callback)
#
ファイルの所有者とグループを非同期的に変更します。完了コールバックには、起こりうる例外以外の引数は渡されません。
詳細については、POSIX の chown(2)
のドキュメントを参照してください。
fs.close(fd[, callback])
#
fd
<整数>callback
<Function>err
<Error>
ファイル記述子を閉じます。完了コールバックには、起こりうる例外以外の引数は渡されません。
他の fs
操作で現在使用中のファイル記述子 (fd
) に対して fs.close()
を呼び出すと、未定義の動作につながる可能性があります。
詳細については、POSIX の close(2)
のドキュメントを参照してください。
fs.copyFile(src, dest[, mode], callback)
#
src
<文字列> | <Buffer> | <URL> コピー元のファイル名dest
<文字列> | <Buffer> | <URL> コピー操作のコピー先のファイル名mode
<整数> コピー操作の修飾子。デフォルト:0
。callback
<Function>
src
を非同期的に dest
にコピーします。デフォルトでは、dest
がすでに存在する場合は上書きされます。コールバック関数には、起こりうる例外以外の引数は渡されません。Node.js は、コピー操作のアトミシティについては保証しません。コピー先のファイルが書き込み用に開かれた後にエラーが発生した場合、Node.js はコピー先の削除を試みます。
mode
は、コピー操作の動作を指定するオプションの整数です。2 つ以上の値のビット単位の OR で構成されるマスクを作成できます (例: fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE
)。
fs.constants.COPYFILE_EXCL
:dest
が既に存在する場合、コピー操作は失敗します。fs.constants.COPYFILE_FICLONE
: コピー操作は、コピーオンライトの reflink を作成しようとします。プラットフォームがコピーオンライトをサポートしていない場合は、フォールバックコピーメカニズムが使用されます。fs.constants.COPYFILE_FICLONE_FORCE
: コピー操作は、コピーオンライトの reflink を作成しようとします。プラットフォームがコピーオンライトをサポートしていない場合、操作は失敗します。
import { copyFile, constants } from 'node:fs';
function callback(err) {
if (err) throw err;
console.log('source.txt was copied to destination.txt');
}
// destination.txt will be created or overwritten by default.
copyFile('source.txt', 'destination.txt', callback);
// By using COPYFILE_EXCL, the operation will fail if destination.txt exists.
copyFile('source.txt', 'destination.txt', constants.COPYFILE_EXCL, callback);
fs.cp(src, dest[, options], callback)
#
src
<文字列> | <URL> コピー元のパス。dest
<文字列> | <URL> コピー先のパス。options
<Object>dereference
<真偽値> シンボリックリンクを非参照化します。デフォルト:false
。errorOnExist
<真偽値>force
がfalse
で、コピー先が存在する場合、エラーをスローします。デフォルト:false
。filter
<関数> コピーされたファイル/ディレクトリをフィルタリングする関数。項目をコピーする場合はtrue
を返し、無視する場合はfalse
を返します。ディレクトリを無視すると、そのすべての内容もスキップされます。true
またはfalse
に解決されるPromise
を返すこともできます。デフォルト:undefined
。force
<真偽値> 既存のファイルまたはディレクトリを上書きします。この値を false に設定し、コピー先が存在する場合、コピー操作はエラーを無視します。この動作を変更するには、errorOnExist
オプションを使用します。デフォルト:true
。mode
<整数> コピー操作の修飾子。デフォルト:0
。fs.copyFile()
のmode
フラグを参照してください。preserveTimestamps
<真偽値>true
の場合、src
からのタイムスタンプが保持されます。デフォルト:false
。recursive
<boolean> ディレクトリを再帰的にコピーします。デフォルト:false
verbatimSymlinks
<boolean>true
の場合、シンボリックリンクのパス解決をスキップします。デフォルト:false
callback
<Function>
src
から dest
へ、サブディレクトリやファイルを含むディレクトリ構造全体を非同期にコピーします。
あるディレクトリを別のディレクトリへコピーする場合、glob はサポートされず、cp dir1/ dir2/
と同様の動作になります。
fs.createReadStream(path[, options])
#
path
<文字列> | <Buffer> | <URL>options
<string> | <Object>flags
<文字列> ファイルシステムのflags
のサポート を参照してください。デフォルト:'r'
。encoding
<string> デフォルト:null
fd
<整数> | <FileHandle> デフォルト:null
mode
<整数> デフォルト:0o666
autoClose
<boolean> デフォルト:true
emitClose
<boolean> デフォルト:true
start
<integer>end
<integer> デフォルト:Infinity
highWaterMark
<integer> デフォルト:64 * 1024
fs
<オブジェクト> | <null> デフォルト:null
signal
<AbortSignal> | <null> デフォルト:null
- 戻り値: <fs.ReadStream>
<stream.Readable>のデフォルトのhighWaterMark
である16KiBとは異なり、このメソッドによって返されるストリームのデフォルトのhighWaterMark
は64KiBです。
options
には、ファイル全体ではなく、ファイルのバイト範囲を読み取るための start
および end
の値を含めることができます。start
と end
は両方とも包括的であり、0 から数え始め、許容値は [0, Number.MAX_SAFE_INTEGER
] の範囲です。fd
が指定され、start
が省略または undefined
の場合、fs.createReadStream()
は現在のファイル位置から順次読み取ります。encoding
は、<Buffer> が受け入れる任意のものを指定できます。
fd
が指定されている場合、ReadStream
は path
引数を無視し、指定されたファイル記述子を使用します。これは、'open'
イベントが発行されないことを意味します。fd
はブロッキングである必要があります。非ブロッキングの fd
は、<net.Socket> に渡す必要があります。
fd
が (キーボードやサウンドカードなどの) ブロッキング読み取りのみをサポートする文字デバイスを指している場合、データが利用可能になるまで読み取り操作は完了しません。これにより、プロセスが終了できなくなり、ストリームが自然に閉じられない可能性があります。
デフォルトでは、ストリームは破棄された後に'close'
イベントを発行します。この動作を変更するには、emitClose
オプションをfalse
に設定します。
fs
オプションを提供することにより、open
、read
、および close
の対応する fs
実装を上書きすることができます。fs
オプションを提供する場合、read
の上書きが必要です。fd
が提供されていない場合は、open
の上書きも必要です。autoClose
が true
の場合は、close
の上書きも必要です。
import { createReadStream } from 'node:fs';
// Create a stream from some character device.
const stream = createReadStream('/dev/input/event0');
setTimeout(() => {
stream.close(); // This may not close the stream.
// Artificially marking end-of-stream, as if the underlying resource had
// indicated end-of-file by itself, allows the stream to close.
// This does not cancel pending read operations, and if there is such an
// operation, the process may still not be able to exit successfully
// until it finishes.
stream.push(null);
stream.read(0);
}, 100);
autoClose
がfalseの場合、エラーが発生した場合でもファイル記述子は閉じられません。それを閉じ、ファイル記述子のリークがないことを確認するのはアプリケーションの責任です。autoClose
がtrue(デフォルトの動作)に設定されている場合、'error'
または'end'
でファイル記述子が自動的に閉じられます。
mode
はファイル モード (パーミッションとスティッキー ビット) を設定しますが、ファイルが作成された場合に限ります。
100バイトのファイルの最後の10バイトを読み取る例
import { createReadStream } from 'node:fs';
createReadStream('sample.txt', { start: 90, end: 99 });
options
が文字列の場合、それはエンコーディングを指定します。
fs.createWriteStream(path[, options])
#
path
<文字列> | <Buffer> | <URL>options
<string> | <Object>flags
<文字列> ファイルシステムのflags
のサポート を参照してください。デフォルト:'w'
。encoding
<string> デフォルト:'utf8'
fd
<整数> | <FileHandle> デフォルト:null
mode
<整数> デフォルト:0o666
autoClose
<boolean> デフォルト:true
emitClose
<boolean> デフォルト:true
start
<integer>fs
<オブジェクト> | <null> デフォルト:null
signal
<AbortSignal> | <null> デフォルト:null
highWaterMark
<number> デフォルト:16384
flush
<boolean>true
の場合、基盤となるファイル記述子が閉じられる前にフラッシュされます。デフォルト:false
。
- 戻り値: <fs.WriteStream>
options
には、ファイルの先頭より後の位置にデータを書き込むことができる start
オプションを含めることもできます。許容値は [0, Number.MAX_SAFE_INTEGER
] の範囲です。ファイルを置換するのではなく変更する場合は、flags
オプションをデフォルトの w
ではなく r+
に設定する必要がある場合があります。encoding
は、<Buffer> が受け入れる任意のものを指定できます。
autoClose
がtrue(デフォルトの動作)に設定されている場合、'error'
または'finish'
でファイル記述子が自動的に閉じられます。autoClose
がfalseの場合、エラーが発生した場合でもファイル記述子は閉じられません。それを閉じ、ファイル記述子のリークがないことを確認するのはアプリケーションの責任です。
デフォルトでは、ストリームは破棄された後に'close'
イベントを発行します。この動作を変更するには、emitClose
オプションをfalse
に設定します。
fs
オプションを提供することにより、open
、write
、writev
、および close
の対応する fs
実装を上書きすることができます。writev()
なしで write()
を上書きすると、一部の最適化 (_writev()
) が無効になるため、パフォーマンスが低下する可能性があります。fs
オプションを提供する場合、少なくとも write
と writev
のどちらかの上書きが必要です。fd
オプションが提供されていない場合は、open
の上書きも必要です。autoClose
が true
の場合は、close
の上書きも必要です。
<fs.ReadStream> と同様に、fd
が指定されている場合、<fs.WriteStream> は path
引数を無視し、指定されたファイル記述子を使用します。これは、'open'
イベントが発行されないことを意味します。fd
はブロッキングである必要があります。非ブロッキングの fd
は、<net.Socket> に渡す必要があります。
options
が文字列の場合、それはエンコーディングを指定します。
fs.exists(path, callback)
#
path
<文字列> | <Buffer> | <URL>callback
<Function>exists
<真偽値>
ファイルシステムで確認することにより、指定されたパスが存在するかどうかをテストします。その後、callback
引数を true または false のどちらかで呼び出します。
import { exists } from 'node:fs';
exists('/etc/passwd', (e) => {
console.log(e ? 'it exists' : 'no passwd!');
});
このコールバックのパラメーターは、他の Node.js コールバックと一致していません。 通常、Node.js コールバックの最初のパラメーターは err
パラメーターで、オプションで他のパラメーターが続きます。fs.exists()
コールバックには、真偽値のパラメーターが 1 つだけあります。これが、fs.exists()
の代わりに fs.access()
を推奨する理由の 1 つです。
fs.open()
、fs.readFile()
、または fs.writeFile()
を呼び出す前に、fs.exists()
を使用してファイルの存在を確認することは推奨されません。そうすると、他のプロセスが 2 回の呼び出しの間でファイルの状態を変更する可能性があるため、競合状態が発生します。代わりに、ユーザーコードはファイルを直接開く/読み取る/書き込み、ファイルが存在しない場合に発生するエラーを処理する必要があります。
書き込み(非推奨)
import { exists, open, close } from 'node:fs';
exists('myfile', (e) => {
if (e) {
console.error('myfile already exists');
} else {
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 { open, close, exists } from 'node:fs';
exists('myfile', (e) => {
if (e) {
open('myfile', 'r', (err, fd) => {
if (err) throw err;
try {
readMyData(fd);
} finally {
close(fd, (err) => {
if (err) throw err;
});
}
});
} else {
console.error('myfile does not exist');
}
});
読み取り(推奨)
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;
});
}
});
上記の「推奨されない」例では、存在を確認してからファイルを使用します。一方、「推奨される」例は、ファイルを直接使用し、エラー (存在する場合) を処理するため、より優れています。
一般的に、ファイルの存在を確認するのは、ファイルが直接使用されない場合 (たとえば、その存在が別のプロセスからのシグナルである場合) のみです。
fs.fchmod(fd, mode, callback)
#
fd
<整数>mode
<文字列> | <整数>callback
<Function>err
<Error>
ファイルに対する権限を設定します。完了コールバックには、起こりうる例外以外の引数は渡されません。
詳細については、POSIX の fchmod(2)
のドキュメントを参照してください。
fs.fchown(fd, uid, gid, callback)
#
fd
<整数>uid
<整数>gid
<整数>callback
<Function>err
<Error>
ファイルの所有者を設定します。完了コールバックには、起こりうる例外以外の引数は渡されません。
詳細については、POSIX の fchown(2)
のドキュメントを参照してください。
fs.fdatasync(fd, callback)
#
fd
<整数>callback
<Function>err
<Error>
ファイルに関連付けられている現在キューに登録されているすべての I/O 操作を、オペレーティング システムの同期 I/O 完了状態に強制します。詳細については、POSIX の fdatasync(2)
のドキュメントを参照してください。完了コールバックには、起こりうる例外以外の引数は渡されません。
fs.fstat(fd[, options], callback)
#
fd
<整数>options
<Object>bigint
<boolean> 返される <fs.Stats> オブジェクトの数値がbigint
であるべきかどうか。デフォルト:false
。
callback
<Function>err
<Error>stats
<fs.Stats>
ファイル記述子の <fs.Stats> を使用してコールバックを呼び出します。
詳細については、POSIX の fstat(2)
のドキュメントを参照してください。
fs.fsync(fd, callback)
#
fd
<整数>callback
<Function>err
<Error>
オープン ファイル記述子のすべてのデータをストレージ デバイスにフラッシュするように要求します。特定の実装は、オペレーティング システムとデバイスに固有です。詳細については、POSIX の fsync(2)
のドキュメントを参照してください。完了コールバックには、起こりうる例外以外の引数は渡されません。
fs.ftruncate(fd[, len], callback)
#
fd
<整数>len
<integer> デフォルト:0
callback
<Function>err
<Error>
ファイル記述子を切り詰めます。完了コールバックには、起こりうる例外以外の引数は渡されません。
詳細については、POSIX の ftruncate(2)
のドキュメントを参照してください。
ファイル記述子が参照するファイルが len
バイトよりも大きい場合、ファイルの最初の len
バイトのみが保持されます。
たとえば、次のプログラムでは、ファイルの最初の 4 バイトのみが保持されます。
import { open, close, ftruncate } from 'node:fs';
function closeFd(fd) {
close(fd, (err) => {
if (err) throw err;
});
}
open('temp.txt', 'r+', (err, fd) => {
if (err) throw err;
try {
ftruncate(fd, 4, (err) => {
closeFd(fd);
if (err) throw err;
});
} catch (err) {
closeFd(fd);
if (err) throw err;
}
});
ファイルが以前に len
バイトより短かった場合は拡張され、拡張された部分はヌルバイト ('\0'
) で埋められます。
len
が負の場合、0
が使用されます。
fs.futimes(fd, atime, mtime, callback)
#
fd
<整数>atime
<number> | <string> | <Date>mtime
<number> | <string> | <Date>callback
<Function>err
<Error>
指定されたファイル記述子が参照するオブジェクトのファイルシステムのタイムスタンプを変更します。fs.utimes()
を参照してください。
fs.lchmod(path, mode, callback)
#
path
<文字列> | <Buffer> | <URL>mode
<integer>callback
<Function>err
<Error> | <AggregateError>
シンボリックリンクのパーミッションを変更します。完了コールバックには、発生しうる例外以外の引数は渡されません。
このメソッドは macOS でのみ実装されています。
詳細はPOSIXのlchmod(2)
ドキュメントを参照してください。
fs.lchown(path, uid, gid, callback)
#
シンボリックリンクの所有者を設定します。完了コールバックには、発生しうる例外以外の引数は渡されません。
詳細はPOSIXのlchown(2)
ドキュメントを参照してください。
fs.lutimes(path, atime, mtime, callback)
#
path
<文字列> | <Buffer> | <URL>atime
<number> | <string> | <Date>mtime
<number> | <string> | <Date>callback
<Function>err
<Error>
fs.utimes()
と同じようにファイルのアクセス時間と変更時間を変更しますが、パスがシンボリックリンクを参照する場合、リンクは非参照化されません。代わりに、シンボリックリンク自体のタイムスタンプが変更されます。
完了コールバックには、発生しうる例外以外の引数は渡されません。
fs.link(existingPath, newPath, callback)
#
existingPath
<string> | <Buffer> | <URL>newPath
<string> | <Buffer> | <URL>callback
<Function>err
<Error>
existingPath
からnewPath
への新しいリンクを作成します。詳細はPOSIXのlink(2)
ドキュメントを参照してください。完了コールバックには、発生しうる例外以外の引数は渡されません。
fs.lstat(path[, options], callback)
#
path
<文字列> | <Buffer> | <URL>options
<Object>bigint
<boolean> 返される <fs.Stats> オブジェクトの数値がbigint
であるべきかどうか。デフォルト:false
。
callback
<Function>err
<Error>stats
<fs.Stats>
パスで参照されるシンボリックリンクの<fs.Stats>を取得します。コールバックは、2つの引数 (err, stats)
を受け取ります。ここで stats
は<fs.Stats>オブジェクトです。lstat()
は stat()
と同じですが、path
がシンボリックリンクの場合、参照先のファイルではなく、リンク自体が stat されます。
詳細はPOSIXのlstat(2)
ドキュメントを参照してください。
fs.mkdir(path[, options], callback)
#
path
<文字列> | <Buffer> | <URL>options
<Object> | <integer>callback
<Function>err
<Error>path
<string> | <undefined> ディレクトリがrecursive
をtrue
に設定して作成された場合にのみ存在します。
非同期的にディレクトリを作成します。
コールバックには、発生しうる例外と、recursive
が true
の場合は、最初に作成されたディレクトリパス、(err[, path])
が渡されます。recursive
が true
の場合でも、ディレクトリが作成されなかった (たとえば、以前に作成されていた場合) 場合、path
は undefined
になることがあります。
オプションの options
引数は、mode
(パーミッションとスティッキービット) を指定する整数、または親ディレクトリを作成するかどうかを示す mode
プロパティと recursive
プロパティを持つオブジェクトにすることができます。path
が存在するディレクトリの場合に fs.mkdir()
を呼び出すと、recursive
が false の場合にのみエラーが発生します。recursive
が false でディレクトリが存在する場合、EEXIST
エラーが発生します。
import { mkdir } from 'node:fs';
// Create ./tmp/a/apple, regardless of whether ./tmp and ./tmp/a exist.
mkdir('./tmp/a/apple', { recursive: true }, (err) => {
if (err) throw err;
});
Windows では、再帰を使用してもルートディレクトリで fs.mkdir()
を使用するとエラーが発生します
import { mkdir } from 'node:fs';
mkdir('/', { recursive: true }, (err) => {
// => [Error: EPERM: operation not permitted, mkdir 'C:\']
});
詳細はPOSIXのmkdir(2)
ドキュメントを参照してください。
fs.mkdtemp(prefix[, options], callback)
#
prefix
<string> | <Buffer> | <URL>options
<string> | <Object>encoding
<string> デフォルト:'utf8'
callback
<Function>
一意な一時ディレクトリを作成します。
一意な一時ディレクトリを作成するために、必須の prefix
の後ろに付加される 6 つのランダムな文字を生成します。プラットフォームの不整合のため、prefix
の末尾に X
文字を使用することは避けてください。一部のプラットフォーム、特にBSDでは、6つ以上のランダムな文字を返し、prefix
の末尾の X
文字をランダムな文字に置き換えることができます。
作成されたディレクトリパスは、コールバックの2番目のパラメータとして文字列で渡されます。
オプションの options
引数には、エンコーディングを指定する文字列、または使用する文字エンコーディングを指定する encoding
プロパティを持つオブジェクトを指定できます。
import { mkdtemp } from 'node:fs';
import { join } from 'node:path';
import { tmpdir } from 'node:os';
mkdtemp(join(tmpdir(), 'foo-'), (err, directory) => {
if (err) throw err;
console.log(directory);
// Prints: /tmp/foo-itXde2 or C:\Users\...\AppData\Local\Temp\foo-itXde2
});
fs.mkdtemp()
メソッドは、6つのランダムに選択された文字を prefix
文字列に直接追加します。たとえば、ディレクトリが /tmp
の場合、/tmp
*内* に一時ディレクトリを作成したい場合は、prefix
は末尾にプラットフォーム固有のパス区切り文字 (require('node:path').sep
) を付ける必要があります。
import { tmpdir } from 'node:os';
import { mkdtemp } from 'node:fs';
// The parent directory for the new temporary directory
const tmpDir = tmpdir();
// This method is *INCORRECT*:
mkdtemp(tmpDir, (err, directory) => {
if (err) throw err;
console.log(directory);
// Will print something similar to `/tmpabc123`.
// A new temporary directory is created at the file system root
// rather than *within* the /tmp directory.
});
// This method is *CORRECT*:
import { sep } from 'node:path';
mkdtemp(`${tmpDir}${sep}`, (err, directory) => {
if (err) throw err;
console.log(directory);
// Will print something similar to `/tmp/abc123`.
// A new temporary directory is created within
// the /tmp directory.
});
fs.open(path[, flags[, mode]], callback)
#
path
<文字列> | <Buffer> | <URL>flags
<string> | <number> ファイルシステムのflags
のサポート を参照してください。デフォルト:'r'
。mode
<string> | <integer> デフォルト:0o666
(読み書き可能)callback
<Function>
非同期ファイルオープン。詳細はPOSIXのopen(2)
ドキュメントを参照してください。
mode
は、ファイルが作成された場合にのみファイルモード (パーミッションとスティッキービット) を設定します。Windowsでは、書き込みパーミッションのみを操作できます。fs.chmod()
を参照してください。
コールバックは2つの引数 (err, fd)
を受け取ります。
一部の文字 (< > : " / \ | ? *
) は、ファイル、パス、名前空間の命名 に記載されているように、Windows で予約されています。NTFS では、ファイル名にコロンが含まれている場合、Node.js は この MSDN ページ に記載されているように、ファイルシステムストリームを開きます。
fs.open()
に基づく関数も同様の動作をします。fs.writeFile()
、fs.readFile()
など。
fs.openAsBlob(path[, options])
#
path
<文字列> | <Buffer> | <URL>options
<Object>type
<string> Blob のオプションの mime タイプ。
- 戻り値: <Promise> 成功すると、<Blob> で解決されます。
データが指定されたファイルによって裏付けられる<Blob>を返します。
ファイルは、<Blob> が作成された後に変更してはなりません。変更を加えると、<Blob> データの読み取りが DOMException
エラーで失敗します。Blob
が作成されたとき、およびディスク上でファイルデータが変更されたかどうかを検出するために各読み取りの前に、ファイルに対して同期 stat 操作が行われます。
import { openAsBlob } from 'node:fs';
const blob = await openAsBlob('the.file.txt');
const ab = await blob.arrayBuffer();
blob.stream();
const { openAsBlob } = require('node:fs');
(async () => {
const blob = await openAsBlob('the.file.txt');
const ab = await blob.arrayBuffer();
blob.stream();
})();
fs.opendir(path[, options], callback)
#
path
<文字列> | <Buffer> | <URL>options
<Object>callback
<Function>
ディレクトリを非同期的に開きます。詳細はPOSIXのopendir(3)
ドキュメントを参照してください。
<fs.Dir> を作成します。これには、ディレクトリからの読み取りとクリーンアップのすべての追加機能が含まれています。
encoding
オプションは、ディレクトリを開く際と、後続の読み取り操作時の path
のエンコーディングを設定します。
fs.read(fd, buffer, offset, length, position, callback)
#
fd
<整数>buffer
<Buffer> | <TypedArray> | <DataView> データが書き込まれるバッファ。offset
<integer>buffer
内でデータを書き込む位置。length
<integer> 読み込むバイト数。position
<integer> | <bigint> | <null> ファイルの読み込みを開始する位置を指定します。position
がnull
または-1
の場合、データは現在のファイル位置から読み込まれ、ファイル位置が更新されます。position
が負でない整数の場合、ファイル位置は変更されません。callback
<Function>
fd
で指定されたファイルからデータを読み取ります。
コールバックには、3つの引数 (err, bytesRead, buffer)
が渡されます。
ファイルが同時に変更されない場合、読み込まれたバイト数がゼロになったときにファイルの終わりに到達します。
このメソッドがutil.promisify()
されたバージョンとして呼び出された場合、bytesRead
および buffer
プロパティを持つ Object
の Promise を返します。
fs.read(fd[, options], callback)
#
fd
<整数>options
<Object>buffer
<Buffer> | <TypedArray> | <DataView> デフォルト:Buffer.alloc(16384)
offset
<integer> デフォルト:0
length
<integer> デフォルト:buffer.byteLength - offset
position
<integer> | <bigint> | <null> デフォルト:null
callback
<Function>
fs.read()
関数と同様に、このバージョンではオプションの options
オブジェクトを受け取ります。options
オブジェクトが指定されていない場合は、上記の値がデフォルトになります。
fs.read(fd, buffer[, options], callback)
#
fd
<整数>buffer
<Buffer> | <TypedArray> | <DataView> データが書き込まれるバッファ。options
<Object>callback
<Function>
fs.read()
関数と同様に、このバージョンではオプションの options
オブジェクトを受け取ります。options
オブジェクトが指定されていない場合は、上記の値がデフォルトになります。
fs.readdir(path[, options], callback)
#
path
<文字列> | <Buffer> | <URL>options
<string> | <Object>callback
<Function>err
<Error>files
<string[]> | <Buffer[]> | <fs.Dirent[]>
ディレクトリの内容を読み取ります。コールバックは (err, files)
の2つの引数を受け取ります。ここで、files
はディレクトリ内のファイル名の配列であり、'.'
と '..'
は除外されます。
詳細については、POSIX のreaddir(3)
ドキュメントを参照してください。
オプションの options
引数には、エンコーディングを指定する文字列、またはコールバックに渡されるファイル名に使用する文字エンコーディングを指定する encoding
プロパティを持つオブジェクトを指定できます。encoding
が 'buffer'
に設定されている場合、返されるファイル名は<Buffer> オブジェクトとして渡されます。
options.withFileTypes
が true
に設定されている場合、files
配列には <fs.Dirent> オブジェクトが含まれます。
fs.readFile(path[, options], callback)
#
path
<string> | <Buffer> | <URL> | <integer> ファイル名またはファイル記述子options
<Object> | <string>encoding
<string> | <null> デフォルト:null
flag
<string> ファイルシステムのflags
のサポート を参照してください。デフォルト:'r'
。signal
<AbortSignal> 進行中の readFile を中止できるようにします
callback
<Function>err
<Error> | <AggregateError>data
<文字列> | <Buffer>
ファイルの全内容を非同期的に読み込みます。
import { readFile } from 'node:fs';
readFile('/etc/passwd', (err, data) => {
if (err) throw err;
console.log(data);
});
コールバックには、2つの引数 (err, data)
が渡されます。ここで、data
はファイルの内容です。
エンコーディングが指定されていない場合、生のバッファが返されます。
options
が文字列の場合、エンコーディングを指定します。
import { readFile } from 'node:fs';
readFile('/etc/passwd', 'utf8', callback);
パスがディレクトリの場合、fs.readFile()
および fs.readFileSync()
の動作はプラットフォーム固有です。macOS、Linux、およびWindowsでは、エラーが返されます。FreeBSDでは、ディレクトリの内容の表現が返されます。
import { readFile } from 'node:fs';
// macOS, Linux, and Windows
readFile('<directory>', (err, data) => {
// => [Error: EISDIR: illegal operation on a directory, read <directory>]
});
// FreeBSD
readFile('<directory>', (err, data) => {
// => null, <data>
});
AbortSignal
を使用して進行中のリクエストを中断することができます。リクエストが中断された場合、コールバックは AbortError
と共に呼び出されます。
import { readFile } from 'node:fs';
const controller = new AbortController();
const signal = controller.signal;
readFile(fileInfo[0].name, { signal }, (err, buf) => {
// ...
});
// When you want to abort the request
controller.abort();
fs.readFile()
関数はファイル全体をバッファリングします。メモリコストを最小限に抑えるには、可能な場合は fs.createReadStream()
を介したストリーミングを優先してください。
進行中のリクエストを中止しても、個々のオペレーティングシステムのリクエストが中止されるのではなく、内部バッファリングである fs.readFile
の実行が中止されます。
ファイル記述子#
- 指定されたファイル記述子は、読み取りをサポートしている必要があります。
- ファイル記述子が
path
として指定されている場合、自動的に閉じられることはありません。 - 読み取りは現在の位置から開始されます。たとえば、ファイルにすでに
'Hello World'
があり、ファイル記述子で6バイトが読み取られた場合、同じファイル記述子でfs.readFile()
を呼び出すと、'Hello World'
ではなく'World'
が返されます。
パフォーマンスに関する考慮事項#
fs.readFile()
メソッドは、ファイルのコンテンツを一度に1チャンクずつメモリに非同期的に読み込み、各チャンクの間でイベントループを回転させることができます。これにより、読み取り操作が、基盤となるlibuvスレッドプールを使用している可能性のある他のアクティビティへの影響を軽減できますが、完全なファイルをメモリに読み込むのに時間がかかることを意味します。
追加の読み取りオーバーヘッドは、システムによって大きく異なり、読み取られるファイルの種類によって異なります。ファイルの種類が通常のファイル(たとえばパイプ)ではなく、Node.jsが実際のファイルサイズを判断できない場合、各読み取り操作は64KiBのデータをロードします。通常のファイルの場合、各読み取りは512 KiBのデータを処理します。
可能な限り高速なファイルコンテンツの読み取りを必要とするアプリケーションの場合、fs.read()
を直接使用し、アプリケーションコードがファイル全体のコンテンツの読み取りを管理する方が適切です。
Node.js GitHub issue #25741 には、異なるNode.jsバージョンでの複数のファイルサイズの fs.readFile()
のパフォーマンスに関する詳細な情報と分析が記載されています。
fs.readlink(path[, options], callback)
#
path
<文字列> | <Buffer> | <URL>options
<string> | <Object>encoding
<string> デフォルト:'utf8'
callback
<Function>
path
で参照されるシンボリックリンクの内容を読み取ります。コールバックは (err, linkString)
の2つの引数を受け取ります。
詳細については、POSIX の readlink(2)
ドキュメントを参照してください。
オプションの options
引数には、エンコーディングを指定する文字列、またはコールバックに渡されるリンクパスに使用する文字エンコーディングを指定する encoding
プロパティを持つオブジェクトを指定できます。encoding
が 'buffer'
に設定されている場合、返されるリンクパスは <Buffer> オブジェクトとして渡されます。
fs.readv(fd, buffers[, position], callback)
#
fd
<整数>buffers
<ArrayBufferView[]>position
<integer> | <null> デフォルト:null
callback
<Function>err
<Error>bytesRead
<integer>buffers
<ArrayBufferView[]>
readv()
を使用して、fd
で指定されたファイルから読み取り、ArrayBufferView
の配列に書き込みます。
position
は、ファイルの先頭からデータを読み取る必要があるオフセットです。typeof position !== 'number'
の場合、データは現在の位置から読み取られます。
コールバックには、3つの引数 err
、bytesRead
、およびbuffers
が渡されます。bytesRead
はファイルから読み取られたバイト数です。
このメソッドがutil.promisify()
されたバージョンとして呼び出された場合、bytesRead
とbuffers
プロパティを持つObject
のPromiseを返します。
fs.realpath(path[, options], callback)
#
path
<文字列> | <Buffer> | <URL>options
<string> | <Object>encoding
<string> デフォルト:'utf8'
callback
<Function>
.
、..
、およびシンボリックリンクを解決することにより、標準的なパス名を非同期的に計算します。
標準的なパス名は必ずしも一意ではありません。ハードリンクとバインドマウントは、多くのパス名を介してファイルシステムエンティティを公開できます。
この関数は、realpath(3)
のように動作しますが、いくつかの例外があります
-
大文字と小文字を区別しないファイルシステムでは、大文字と小文字の変換は実行されません。
-
シンボリックリンクの最大数はプラットフォームに依存せず、通常、ネイティブの
realpath(3)
実装がサポートするよりも(はるかに)高くなっています。
callback
は (err, resolvedPath)
の2つの引数を受け取ります。相対パスを解決するために process.cwd
を使用する場合があります。
UTF8 文字列に変換できるパスのみがサポートされています。
オプションの options
引数には、エンコーディングを指定する文字列、またはコールバックに渡されるパスに使用する文字エンコーディングを指定する encoding
プロパティを持つオブジェクトを指定できます。encoding
が 'buffer'
に設定されている場合、返されるパスは <Buffer> オブジェクトとして渡されます。
path
がソケットまたはパイプに解決される場合、関数はそのオブジェクトのシステム依存の名前を返します。
fs.realpath.native(path[, options], callback)
#
path
<文字列> | <Buffer> | <URL>options
<string> | <Object>encoding
<string> デフォルト:'utf8'
callback
<Function>
非同期 realpath(3)
。
callback
は (err, resolvedPath)
の2つの引数を受け取ります。
UTF8 文字列に変換できるパスのみがサポートされています。
オプションの options
引数には、エンコーディングを指定する文字列、またはコールバックに渡されるパスに使用する文字エンコーディングを指定する encoding
プロパティを持つオブジェクトを指定できます。encoding
が 'buffer'
に設定されている場合、返されるパスは <Buffer> オブジェクトとして渡されます。
Linux では、Node.js が musl libc にリンクされている場合、この関数が動作するためには、procfs ファイルシステムが /proc
にマウントされている必要があります。Glibc にはこの制限はありません。
fs.rename(oldPath, newPath, callback)
#
oldPath
<string> | <Buffer> | <URL>newPath
<string> | <Buffer> | <URL>callback
<Function>err
<Error>
oldPath
のファイルを、newPath
として指定されたパス名に非同期的に名前変更します。newPath
がすでに存在する場合、上書きされます。newPath
にディレクトリがある場合、代わりにエラーが発生します。完了コールバックには、可能性のある例外以外の引数は渡されません。
参照: rename(2)
。
import { rename } from 'node:fs';
rename('oldFile.txt', 'newFile.txt', (err) => {
if (err) throw err;
console.log('Rename complete!');
});
fs.rmdir(path[, options], callback)
#
path
<文字列> | <Buffer> | <URL>options
<Object>maxRetries
<integer>EBUSY
、EMFILE
、ENFILE
、ENOTEMPTY
、またはEPERM
エラーが発生した場合、Node.js は、試行ごとにretryDelay
ミリ秒ずつ長く線形バックオフ待機で操作を再試行します。このオプションは、再試行の回数を表します。このオプションは、recursive
オプションがtrue
でない場合は無視されます。デフォルト:0
。recursive
<boolean>true
の場合、再帰的なディレクトリ削除を実行します。再帰モードでは、操作は失敗時に再試行されます。デフォルト:false
。非推奨。retryDelay
<integer> 再試行の間隔をミリ秒単位で指定します。このオプションは、recursive
オプションがtrue
でない場合は無視されます。デフォルト:100
。
callback
<Function>err
<Error>
非同期rmdir(2)
。完了コールバックには、可能性のある例外以外の引数は渡されません。
ファイル(ディレクトリではない)でfs.rmdir()
を使用すると、WindowsではENOENT
エラーが発生し、POSIXではENOTDIR
エラーが発生します。
rm -rf
Unixコマンドと同様の動作を実現するには、オプション{ recursive: true, force: true }
を指定してfs.rm()
を使用します。
fs.rm(path[, options], callback)
#
path
<文字列> | <Buffer> | <URL>options
<Object>force
<boolean>true
の場合、path
が存在しない場合は例外が無視されます。デフォルト:false
。maxRetries
<integer>EBUSY
、EMFILE
、ENFILE
、ENOTEMPTY
、またはEPERM
エラーが発生した場合、Node.js は、試行ごとにretryDelay
ミリ秒ずつ長く線形バックオフ待機で操作を再試行します。このオプションは、再試行の回数を表します。このオプションは、recursive
オプションがtrue
でない場合は無視されます。デフォルト:0
。recursive
<boolean>true
の場合、再帰的な削除を実行します。再帰モードでは、失敗時に操作が再試行されます。デフォルト:false
。retryDelay
<integer> 再試行の間隔をミリ秒単位で指定します。このオプションは、recursive
オプションがtrue
でない場合は無視されます。デフォルト:100
。
callback
<Function>err
<Error>
ファイルとディレクトリを非同期的に削除します(標準のPOSIX rm
ユーティリティに基づいてモデル化されています)。完了コールバックには、可能性のある例外以外の引数は渡されません。
fs.stat(path[, options], callback)
#
path
<文字列> | <Buffer> | <URL>options
<Object>bigint
<boolean> 返される <fs.Stats> オブジェクトの数値がbigint
であるべきかどうか。デフォルト:false
。
callback
<Function>err
<Error>stats
<fs.Stats>
非同期 stat(2)
。コールバックは (err, stats)
の2つの引数を受け取ります。ここで、stats
は <fs.Stats> オブジェクトです。
エラーの場合、err.code
は Common System Errors のいずれかになります。
fs.stat()
はシンボリックリンクに従います。リンク自体を確認するには、fs.lstat()
を使用してください。
fs.open()
、fs.readFile()
、または fs.writeFile()
を呼び出す前に、ファイルの存在を確認するために fs.stat()
を使用することは推奨されません。代わりに、ユーザーコードはファイルを直接開く/読み取る/書き込み、ファイルが利用できない場合に発生するエラーを処理する必要があります。
後で操作せずにファイルの存在を確認するには、fs.access()
をお勧めします。
たとえば、次のディレクトリ構造があるとします
- txtDir
-- file.txt
- app.js
次のプログラムは、指定されたパスの統計情報を確認します
import { stat } from 'node:fs';
const pathsToCheck = ['./txtDir', './txtDir/file.txt'];
for (let i = 0; i < pathsToCheck.length; i++) {
stat(pathsToCheck[i], (err, stats) => {
console.log(stats.isDirectory());
console.log(stats);
});
}
結果の出力は次のようになります
true
Stats {
dev: 16777220,
mode: 16877,
nlink: 3,
uid: 501,
gid: 20,
rdev: 0,
blksize: 4096,
ino: 14214262,
size: 96,
blocks: 0,
atimeMs: 1561174653071.963,
mtimeMs: 1561174614583.3518,
ctimeMs: 1561174626623.5366,
birthtimeMs: 1561174126937.2893,
atime: 2019-06-22T03:37:33.072Z,
mtime: 2019-06-22T03:36:54.583Z,
ctime: 2019-06-22T03:37:06.624Z,
birthtime: 2019-06-22T03:28:46.937Z
}
false
Stats {
dev: 16777220,
mode: 33188,
nlink: 1,
uid: 501,
gid: 20,
rdev: 0,
blksize: 4096,
ino: 14214074,
size: 8,
blocks: 8,
atimeMs: 1561174616618.8555,
mtimeMs: 1561174614584,
ctimeMs: 1561174614583.8145,
birthtimeMs: 1561174007710.7478,
atime: 2019-06-22T03:36:56.619Z,
mtime: 2019-06-22T03:36:54.584Z,
ctime: 2019-06-22T03:36:54.584Z,
birthtime: 2019-06-22T03:26:47.711Z
}
fs.statfs(path[, options], callback)
#
path
<文字列> | <Buffer> | <URL>options
<Object>bigint
<boolean> 返される <fs.StatFs> オブジェクトの数値がbigint
であるかどうか。デフォルト:false
。
callback
<Function>err
<Error>stats
<fs.StatFs>
非同期 statfs(2)
。path
を含むマウントされたファイルシステムに関する情報を返します。コールバックは (err, stats)
の2つの引数を受け取ります。ここで、stats
は <fs.StatFs> オブジェクトです。
エラーの場合、err.code
は Common System Errors のいずれかになります。
fs.symlink(target, path[, type], callback)
#
target
<string> | <Buffer> | <URL>path
<文字列> | <Buffer> | <URL>type
<string> | <null> デフォルト:null
callback
<Function>err
<Error>
target
を指す path
という名前のリンクを作成します。完了コールバックには、発生する可能性のある例外以外に引数は渡されません。
詳細については、POSIX の symlink(2)
ドキュメントを参照してください。
type
引数は Windows でのみ利用可能で、他のプラットフォームでは無視されます。'dir'
、'file'
、または 'junction'
に設定できます。type
引数が文字列でない場合、Node.js は target
の型を自動検出し、'file'
または 'dir'
を使用します。target
が存在しない場合は、'file'
が使用されます。Windows のジャンクションポイントは、宛先パスが絶対パスである必要があります。'junction'
を使用する場合、target
引数は自動的に絶対パスに正規化されます。NTFS ボリューム上のジャンクションポイントは、ディレクトリのみを指すことができます。
相対ターゲットは、リンクの親ディレクトリに対する相対パスです。
import { symlink } from 'node:fs';
symlink('./mew', './mewtwo', callback);
上記の例では、同じディレクトリ内の mew
を指すシンボリックリンク mewtwo
を作成します。
$ tree .
.
├── mew
└── mewtwo -> ./mew
fs.truncate(path[, len], callback)
#
path
<文字列> | <Buffer> | <URL>len
<integer> デフォルト:0
callback
<Function>err
<Error> | <AggregateError>
ファイルを切り詰めます。完了コールバックには、発生する可能性のある例外以外に引数は渡されません。ファイル記述子を最初の引数として渡すこともできます。この場合、fs.ftruncate()
が呼び出されます。
import { truncate } from 'node:fs';
// Assuming that 'path/file.txt' is a regular file.
truncate('path/file.txt', (err) => {
if (err) throw err;
console.log('path/file.txt was truncated');
});
const { truncate } = require('node:fs');
// Assuming that 'path/file.txt' is a regular file.
truncate('path/file.txt', (err) => {
if (err) throw err;
console.log('path/file.txt was truncated');
});
ファイル記述子の受け渡しは非推奨であり、将来的にエラーがスローされる可能性があります。
詳細については、POSIX の truncate(2)
ドキュメントを参照してください。
fs.unlink(path, callback)
#
path
<文字列> | <Buffer> | <URL>callback
<Function>err
<Error>
ファイルまたはシンボリックリンクを非同期的に削除します。完了コールバックには、発生する可能性のある例外以外に引数は渡されません。
import { unlink } from 'node:fs';
// Assuming that 'path/file.txt' is a regular file.
unlink('path/file.txt', (err) => {
if (err) throw err;
console.log('path/file.txt was deleted');
});
fs.unlink()
は、空であるかどうかにかかわらず、ディレクトリでは機能しません。ディレクトリを削除するには、fs.rmdir()
を使用してください。
詳細については、POSIX の unlink(2)
ドキュメントを参照してください。
fs.unwatchFile(filename[, listener])
#
filename
<string> | <Buffer> | <URL>listener
<Function> オプション。以前にfs.watchFile()
を使用してアタッチされたリスナー。
filename
での変更の監視を停止します。listener
が指定されている場合は、その特定のリスナーのみが削除されます。それ以外の場合は、すべて のリスナーが削除され、実質的に filename
の監視が停止します。
監視されていないファイル名で fs.unwatchFile()
を呼び出すことは、エラーではなく、何もしない操作です。
fs.watch()
を使用する方が、fs.watchFile()
および fs.unwatchFile()
よりも効率的です。可能な場合は、fs.watchFile()
および fs.unwatchFile()
の代わりに fs.watch()
を使用する必要があります。
fs.utimes(path, atime, mtime, callback)
#
path
<文字列> | <Buffer> | <URL>atime
<number> | <string> | <Date>mtime
<number> | <string> | <Date>callback
<Function>err
<Error>
path
で参照されるオブジェクトのファイルシステムタイムスタンプを変更します。
atime
および mtime
引数は、次のルールに従います。
- 値は、Unix エポック時間を秒単位で表す数値、
Date
、または'123456789.0'
のような数値文字列のいずれかになります。 - 値を数値に変換できない場合、または
NaN
、Infinity
、または-Infinity
の場合は、Error
がスローされます。
fs.watch(filename[, options][, listener])
#
filename
<string> | <Buffer> | <URL>options
<string> | <Object>persistent
<boolean> ファイルが監視されている間、プロセスを実行し続けるかどうかを示します。デフォルト:true
。recursive
<boolean> すべてのサブディレクトリを監視するか、現在のディレクトリのみを監視するかを示します。これは、ディレクトリが指定されている場合に適用され、サポートされているプラットフォームでのみ適用されます(注意点を参照)。デフォルト:false
。encoding
<string> リスナーに渡されるファイル名に使用する文字エンコーディングを指定します。デフォルト:'utf8'
。signal
<AbortSignal> は、AbortSignal を使用してウォッチャーを閉じることを許可します。
listener
<Function> | <undefined> デフォルト:undefined
- 返り値: <fs.FSWatcher>
filename
での変更を監視します。filename
はファイルまたはディレクトリのいずれかです。
2 番目の引数はオプションです。options
が文字列として指定されている場合は、encoding
を指定します。それ以外の場合、options
はオブジェクトとして渡す必要があります。
リスナーコールバックは、2 つの引数 (eventType, filename)
を受け取ります。eventType
は 'rename'
または 'change'
のいずれかで、filename
はイベントをトリガーしたファイルの名前です。
ほとんどのプラットフォームでは、ディレクトリ内でファイル名が表示または非表示になるたびに、'rename'
が発行されます。
リスナーコールバックは、<fs.FSWatcher> によって発生する 'change'
イベントにアタッチされますが、eventType
の 'change'
値と同じものではありません。
signal
が渡された場合、対応する AbortController を中止すると、返された <fs.FSWatcher> が閉じられます。
注意点#
fs.watch
API はプラットフォーム間で 100% 一貫性があるわけではなく、一部の状況では利用できません。
Windows では、監視対象のディレクトリが移動または名前変更された場合、イベントは発生しません。監視対象のディレクトリが削除されると、EPERM
エラーが報告されます。
可用性#
この機能は、ファイルシステムの変更を通知する方法を提供する基盤となるオペレーティングシステムに依存します。
- Linux システムでは、これは
inotify(7)
を使用します。 - BSD システムでは、これは
kqueue(2)
を使用します。 - macOS では、これはファイルには
kqueue(2)
を使用し、ディレクトリにはFSEvents
を使用します。 - SunOS システム (Solaris および SmartOS を含む) では、これは
event ports
を使用します。 - Windows システムでは、この機能は
ReadDirectoryChangesW
に依存します。 - AIX システムでは、この機能は
AHAFS
に依存します。これは有効にする必要があります。 - IBM i システムでは、この機能はサポートされていません。
基盤となる機能が何らかの理由で利用できない場合、fs.watch()
は機能できず、例外をスローする可能性があります。たとえば、Vagrant や Docker などの仮想化ソフトウェアを使用する場合、ネットワークファイルシステム (NFS、SMB など) またはホストファイルシステムでのファイルまたはディレクトリの監視は信頼性が低く、場合によっては不可能です。
stat
ポーリングを使用する fs.watchFile()
を使用することもできますが、この方法は低速で信頼性が低くなります。
Inode#
Linux および macOS システムでは、fs.watch()
はパスを inode に解決し、inode を監視します。監視対象のパスが削除されて再作成された場合、新しい inode が割り当てられます。ウォッチは削除のイベントを発行しますが、元の inode の監視を続けます。新しい inode のイベントは発行されません。これは想定された動作です。
AIX ファイルは、ファイルの有効期間中、同じ inode を保持します。AIX で監視対象のファイルを保存して閉じると、2 つの通知 (新しいコンテンツの追加と切り詰めの 1 つ) が発生します。
Filename 引数#
コールバックで filename
引数を指定することは、Linux、macOS、Windows、および AIX でのみサポートされています。サポートされているプラットフォームでも、filename
が常に提供されるとは限りません。したがって、filename
引数が常にコールバックで提供されるとは想定しないでください。また、null
の場合に備えてフォールバックロジックを用意してください。
import { watch } from 'node:fs';
watch('somedir', (eventType, filename) => {
console.log(`event type is: ${eventType}`);
if (filename) {
console.log(`filename provided: ${filename}`);
} else {
console.log('filename not provided');
}
});
fs.watchFile(filename[, options], listener)
#
filename
<string> | <Buffer> | <URL>options
<Object>listener
<Function>current
<fs.Stats>previous
<fs.Stats>
- 返り値: <fs.StatWatcher>
filename
での変更を監視します。ファイルがアクセスされるたびに、コールバック listener
が呼び出されます。
options
引数は省略できます。提供される場合、オブジェクトである必要があります。options
オブジェクトには、ファイルの監視中にプロセスが実行を継続する必要があるかどうかを示すブール値の名前付き persistent
が含まれる場合があります。options
オブジェクトでは、ターゲットをポーリングする頻度をミリ秒単位で示す interval
プロパティを指定できます。
listener
は、現在の stat オブジェクトと前の stat オブジェクトの 2 つの引数を受け取ります。
import { watchFile } from 'node:fs';
watchFile('message.text', (curr, prev) => {
console.log(`the current mtime is: ${curr.mtime}`);
console.log(`the previous mtime was: ${prev.mtime}`);
});
これらの stat オブジェクトは fs.Stat
のインスタンスです。bigint
オプションが true
の場合、これらのオブジェクトの数値は BigInt
として指定されます。
ファイルがアクセスされただけでなく、変更されたときに通知を受けるには、curr.mtimeMs
と prev.mtimeMs
を比較する必要があります。
fs.watchFile
操作で ENOENT
エラーが発生した場合、リスナーはすべてのフィールドがゼロ化された状態 (または、日付の場合は Unix エポック) で 1 回呼び出されます。ファイルが後で作成された場合、リスナーは最新の stat オブジェクトを使用して再度呼び出されます。これは v0.10 以降の機能の変更です。
fs.watch()
を使用する方が、fs.watchFile
および fs.unwatchFile
よりも効率的です。可能な場合は、fs.watchFile
および fs.unwatchFile
の代わりに fs.watch
を使用する必要があります。
fs.watchFile()
によって監視されているファイルが消えて再表示された場合、2 番目のコールバックイベント (ファイルの再表示) の previous
の内容は、最初のコールバックイベント (ファイルの消失) の previous
の内容と同じになります。
これは次の場合に発生します
- ファイルが削除され、その後に復元された場合
- ファイルの名前が変更され、その後、2 回目に元の名前に名前変更された場合
fs.write(fd, buffer, offset[, length[, position]], callback)
#
fd
<整数>buffer
<Buffer> | <TypedArray> | <DataView>offset
<integer> デフォルト:0
length
<integer> デフォルト:buffer.byteLength - offset
position
<integer> | <null> デフォルト:null
callback
<Function>err
<Error>bytesWritten
<整数>buffer
<Buffer> | <TypedArray> | <DataView>
buffer
を fd
で指定されたファイルに書き込みます。
offset
は書き込むバッファの部分を決定し、length
は書き込むバイト数を指定する整数です。
position
は、このデータを書き込む必要があるファイルの先頭からのオフセットを指します。typeof position !== 'number'
の場合、データは現在の位置に書き込まれます。 pwrite(2)
を参照してください。
コールバックには、(err, bytesWritten, buffer)
の3つの引数が渡されます。ここで、bytesWritten
は、buffer
から書き込まれたバイト数を指定します。
このメソッドが util.promisify()
されたバージョンとして呼び出された場合、bytesWritten
および buffer
プロパティを持つ Object
の Promise を返します。
コールバックを待たずに同じファイルで fs.write()
を複数回使用するのは安全ではありません。 このシナリオでは、fs.createWriteStream()
が推奨されます。
Linux では、ファイルが追加モードで開かれている場合、位置指定書き込みは機能しません。カーネルは position 引数を無視し、常にデータの末尾に追加します。
fs.write(fd, buffer[, options], callback)
#
fd
<整数>buffer
<Buffer> | <TypedArray> | <DataView>options
<Object>callback
<Function>err
<Error>bytesWritten
<整数>buffer
<Buffer> | <TypedArray> | <DataView>
buffer
を fd
で指定されたファイルに書き込みます。
上記の fs.write
関数と同様に、このバージョンはオプションの options
オブジェクトを受け取ります。 options
オブジェクトが指定されていない場合、上記の値がデフォルトで使用されます。
fs.write(fd, string[, position[, encoding]], callback)
#
fd
<整数>string
<string>position
<integer> | <null> デフォルト:null
encoding
<string> デフォルト:'utf8'
callback
<Function>
string
を fd
で指定されたファイルに書き込みます。 string
が文字列でない場合、例外がスローされます。
position
は、このデータを書き込む必要があるファイルの先頭からのオフセットを指します。typeof position !== 'number'
の場合、データは現在の位置に書き込まれます。 pwrite(2)
を参照してください。
encoding
は、予期される文字列エンコーディングです。
コールバックは、引数 (err, written, string)
を受け取ります。ここで written
は、渡された文字列を書き込むのに必要なバイト数を指定します。書き込まれたバイト数は、書き込まれた文字列の文字数と必ずしも同じではありません。 Buffer.byteLength
を参照してください。
コールバックを待たずに同じファイルで fs.write()
を複数回使用するのは安全ではありません。 このシナリオでは、fs.createWriteStream()
が推奨されます。
Linux では、ファイルが追加モードで開かれている場合、位置指定書き込みは機能しません。カーネルは position 引数を無視し、常にデータの末尾に追加します。
Windows では、ファイル記述子がコンソール (例: fd == 1
または stdout
) に接続されている場合、使用されているエンコーディングに関係なく、非 ASCII 文字を含む文字列はデフォルトでは適切にレンダリングされません。 chcp 65001
コマンドでアクティブなコードページを変更することにより、コンソールが UTF-8 を適切にレンダリングするように構成できます。詳細については、chcp ドキュメントを参照してください。
fs.writeFile(file, data[, options], callback)
#
file
<文字列> | <Buffer> | <URL> | <整数> ファイル名またはファイル記述子data
<文字列> | <Buffer> | <TypedArray> | <DataView>options
<Object> | <string>encoding
<string> | <null> デフォルト:'utf8'
mode
<整数> デフォルト:0o666
flag
<string> ファイルシステムのflags
のサポートを参照してください。デフォルト:'w'
。flush
<真偽値> すべてのデータがファイルに正常に書き込まれ、flush
がtrue
の場合、fs.fsync()
を使用してデータがフラッシュされます。デフォルト:false
。signal
<AbortSignal> 進行中のwriteFileを中止できます。
callback
<Function>err
<Error> | <AggregateError>
file
がファイル名の場合、非同期的にデータをファイルに書き込み、ファイルが既に存在する場合は置き換えます。data
は、文字列またはバッファにすることができます。
file
がファイル記述子の場合、動作は fs.write()
を直接呼び出すのと同様です (推奨)。ファイル記述子の使用に関する以下の注を参照してください。
data
がバッファーの場合、encoding
オプションは無視されます。
mode
オプションは、新しく作成されたファイルにのみ影響します。詳細については、fs.open()
を参照してください。
import { writeFile } from 'node:fs';
import { Buffer } from 'node:buffer';
const data = new Uint8Array(Buffer.from('Hello Node.js'));
writeFile('message.txt', data, (err) => {
if (err) throw err;
console.log('The file has been saved!');
});
options
が文字列の場合、エンコーディングを指定します。
import { writeFile } from 'node:fs';
writeFile('message.txt', 'Hello Node.js', 'utf8', callback);
コールバックを待たずに同じファイルで fs.writeFile()
を複数回使用するのは安全ではありません。このシナリオでは、fs.createWriteStream()
が推奨されます。
fs.readFile
と同様に、fs.writeFile
は、渡されたバッファを書き込むために内部で複数の write
呼び出しを実行する便利なメソッドです。パフォーマンスが重要なコードでは、fs.createWriteStream()
の使用を検討してください。
<AbortSignal> を使用して、fs.writeFile()
をキャンセルできます。キャンセルは「ベストエフォート」であり、ある程度のデータはまだ書き込まれる可能性があります。
import { writeFile } from 'node:fs';
import { Buffer } from 'node:buffer';
const controller = new AbortController();
const { signal } = controller;
const data = new Uint8Array(Buffer.from('Hello Node.js'));
writeFile('message.txt', data, { signal }, (err) => {
// When a request is aborted - the callback is called with an AbortError
});
// When the request should be aborted
controller.abort();
進行中のリクエストを中止しても、個々のオペレーティングシステムのリクエストは中止されず、fs.writeFile
が実行する内部バッファリングが中止されます。
ファイル記述子で fs.writeFile()
を使用する#
file
がファイル記述子の場合、動作は次のように fs.write()
を直接呼び出すのとほぼ同じです。
import { write } from 'node:fs';
import { Buffer } from 'node:buffer';
write(fd, Buffer.from(data, options.encoding), callback);
fs.write()
を直接呼び出す場合との違いは、いくつかの異常な条件下では、fs.write()
がバッファの一部のみを書き込み、残りのデータを書き込むために再試行する必要があるのに対し、fs.writeFile()
はデータが完全に書き込まれるまで (またはエラーが発生するまで) 再試行することです。
これの影響は、混乱の一般的な原因です。ファイル記述子の場合、ファイルは置き換えられません! データは必ずしもファイルの先頭に書き込まれるわけではなく、ファイルの元のデータは、新しく書き込まれたデータの前または後に残る可能性があります。
たとえば、fs.writeFile()
が連続して2回呼び出され、最初に文字列 'Hello'
を書き込み、次に文字列 ', World'
を書き込む場合、ファイルには 'Hello, World'
が含まれ、ファイルの元のデータの一部が含まれる可能性があります (元のファイルのサイズとファイル記述子の位置によって異なります)。記述子ではなくファイル名が使用されていた場合、ファイルには ', World'
のみが含まれることが保証されます。
fs.writev(fd, buffers[, position], callback)
#
fd
<整数>buffers
<ArrayBufferView[]>position
<integer> | <null> デフォルト:null
callback
<Function>err
<Error>bytesWritten
<整数>buffers
<ArrayBufferView[]>
writev()
を使用して、ArrayBufferView
の配列を fd
で指定されたファイルに書き込みます。
position
は、このデータを書き込む必要があるファイルの先頭からのオフセットです。typeof position !== 'number'
の場合、データは現在の位置に書き込まれます。
コールバックには、3つの引数 err
、bytesWritten
、および buffers
が渡されます。bytesWritten
は、buffers
から書き込まれたバイト数です。
このメソッドが util.promisify()
されている場合、bytesWritten
および buffers
プロパティを持つ Object
の Promise を返します。
コールバックを待たずに同じファイルで fs.writev()
を複数回使用するのは安全ではありません。このシナリオでは、fs.createWriteStream()
を使用してください。
Linux では、ファイルが追加モードで開かれている場合、位置指定書き込みは機能しません。カーネルは position 引数を無視し、常にデータの末尾に追加します。
同期 API#
同期 API は、すべての操作を同期的に実行し、操作が完了または失敗するまでイベント ループをブロックします。
fs.accessSync(path[, mode])
#
path
で指定されたファイルまたはディレクトリに対するユーザーの権限を同期的にテストします。 mode
引数は、実行するアクセシビリティ チェックを指定するオプションの整数です。 mode
は、値 fs.constants.F_OK
、または fs.constants.R_OK
、fs.constants.W_OK
、および fs.constants.X_OK
のいずれかのビット単位の OR で構成されるマスク (例: fs.constants.W_OK | fs.constants.R_OK
) のいずれかである必要があります。 mode
の可能な値については、ファイル アクセス定数 を確認してください。
いずれかのアクセシビリティ チェックが失敗した場合、Error
がスローされます。それ以外の場合、メソッドは undefined
を返します。
import { accessSync, constants } from 'node:fs';
try {
accessSync('etc/passwd', constants.R_OK | constants.W_OK);
console.log('can read/write');
} catch (err) {
console.error('no access!');
}
fs.appendFileSync(path, data[, options])
#
path
<string> | <Buffer> | <URL> | <number> ファイル名またはファイルディスクリプターdata
<文字列> | <Buffer>options
<Object> | <string>
ファイルが存在しない場合は作成し、ファイルにデータを同期的に追加します。data
は、文字列または <Buffer> にすることができます。
mode
オプションは、新しく作成されたファイルにのみ影響します。詳細については、fs.open()
を参照してください。
import { appendFileSync } from 'node:fs';
try {
appendFileSync('message.txt', 'data to append');
console.log('The "data to append" was appended to file!');
} catch (err) {
/* Handle the error */
}
options
が文字列の場合、エンコーディングを指定します。
import { appendFileSync } from 'node:fs';
appendFileSync('message.txt', 'data to append', 'utf8');
path
は、(fs.open()
またはfs.openSync()
を使用して)追加用に開かれている数値ファイルディスクリプターとして指定できます。ファイルディスクリプターは自動的に閉じられません。
import { openSync, closeSync, appendFileSync } from 'node:fs';
let fd;
try {
fd = openSync('message.txt', 'a');
appendFileSync(fd, 'data to append', 'utf8');
} catch (err) {
/* Handle the error */
} finally {
if (fd !== undefined)
closeSync(fd);
}
fs.chmodSync(path, mode)
#
詳細については、この API の非同期バージョンのドキュメント (fs.chmod()
) を参照してください。
詳細については、POSIX chmod(2)
のドキュメントを参照してください。
fs.chownSync(path, uid, gid)
#
ファイルの所有者とグループを同期的に変更します。 undefined
を返します。 これは、fs.chown()
の同期バージョンです。
詳細については、POSIX の chown(2)
のドキュメントを参照してください。
fs.closeSync(fd)
#
fd
<整数>
ファイル記述子を閉じます。 undefined
を返します。
他のfs
操作で現在使用中のファイル記述子(fd
)に対してfs.closeSync()
を呼び出すと、未定義の動作につながる可能性があります。
詳細については、POSIX の close(2)
のドキュメントを参照してください。
fs.copyFileSync(src, dest[, mode])
#
src
<文字列> | <Buffer> | <URL> コピー元のファイル名dest
<文字列> | <Buffer> | <URL> コピー操作のコピー先のファイル名mode
<整数> コピー操作の修飾子。デフォルト:0
。
src
をdest
に同期的にコピーします。デフォルトでは、dest
が既に存在する場合は上書きされます。undefined
を返します。Node.jsはコピー操作の原子性について保証しません。書き込みのために宛先ファイルを開いた後にエラーが発生した場合、Node.jsは宛先を削除しようとします。
mode
は、コピー操作の動作を指定するオプションの整数です。2 つ以上の値のビット単位の OR で構成されるマスクを作成できます (例: fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE
)。
fs.constants.COPYFILE_EXCL
:dest
が既に存在する場合、コピー操作は失敗します。fs.constants.COPYFILE_FICLONE
: コピー操作は、コピーオンライトの reflink を作成しようとします。プラットフォームがコピーオンライトをサポートしていない場合は、フォールバックコピーメカニズムが使用されます。fs.constants.COPYFILE_FICLONE_FORCE
: コピー操作は、コピーオンライトの reflink を作成しようとします。プラットフォームがコピーオンライトをサポートしていない場合、操作は失敗します。
import { copyFileSync, constants } from 'node:fs';
// destination.txt will be created or overwritten by default.
copyFileSync('source.txt', 'destination.txt');
console.log('source.txt was copied to destination.txt');
// By using COPYFILE_EXCL, the operation will fail if destination.txt exists.
copyFileSync('source.txt', 'destination.txt', constants.COPYFILE_EXCL);
fs.cpSync(src, dest[, options])
#
src
<文字列> | <URL> コピー元のパス。dest
<文字列> | <URL> コピー先のパス。options
<Object>dereference
<真偽値> シンボリックリンクを非参照化します。デフォルト:false
。errorOnExist
<真偽値>force
がfalse
で、コピー先が存在する場合、エラーをスローします。デフォルト:false
。filter
<Function> コピーするファイル/ディレクトリをフィルタリングする関数。アイテムをコピーする場合はtrue
を、無視する場合はfalse
を返します。ディレクトリを無視すると、その内容もすべてスキップされます。デフォルト:undefined
force
<真偽値> 既存のファイルまたはディレクトリを上書きします。この値を false に設定し、コピー先が存在する場合、コピー操作はエラーを無視します。この動作を変更するには、errorOnExist
オプションを使用します。デフォルト:true
。mode
<integer> コピー操作の修飾子。デフォルト:0
。fs.copyFileSync()
のmode
フラグを参照してください。preserveTimestamps
<真偽値>true
の場合、src
からのタイムスタンプが保持されます。デフォルト:false
。recursive
<boolean> ディレクトリを再帰的にコピーします。デフォルト:false
verbatimSymlinks
<boolean>true
の場合、シンボリックリンクのパス解決をスキップします。デフォルト:false
サブディレクトリとファイルを含む、ディレクトリ構造全体をsrc
からdest
に同期的にコピーします。
あるディレクトリを別のディレクトリへコピーする場合、glob はサポートされず、cp dir1/ dir2/
と同様の動作になります。
fs.existsSync(path)
#
パスが存在する場合はtrue
、それ以外の場合はfalse
を返します。
詳細については、このAPIの非同期バージョンのドキュメント: fs.exists()
を参照してください。
fs.exists()
は非推奨ですが、fs.existsSync()
は非推奨ではありません。fs.exists()
へのcallback
パラメータは、他のNode.jsコールバックと一貫性のないパラメータを受け入れます。fs.existsSync()
はコールバックを使用しません。
import { existsSync } from 'node:fs';
if (existsSync('/etc/passwd'))
console.log('The path exists.');
fs.fchmodSync(fd, mode)
#
ファイルのパーミッションを設定します。undefined
を返します。
詳細については、POSIX の fchmod(2)
のドキュメントを参照してください。
fs.fchownSync(fd, uid, gid)
#
ファイルの所有者を設定します。undefined
を返します。
詳細については、POSIX の fchown(2)
のドキュメントを参照してください。
fs.fdatasyncSync(fd)
#
fd
<整数>
ファイルに関連付けられた現在キューに入れられているすべてのI/O操作を、オペレーティングシステムの同期I/O完了状態に強制します。詳細については、POSIXのfdatasync(2)
ドキュメントを参照してください。undefined
を返します。
fs.fstatSync(fd[, options])
#
fd
<整数>options
<Object>bigint
<boolean> 返される <fs.Stats> オブジェクトの数値がbigint
であるべきかどうか。デフォルト:false
。
- 戻り値: <fs.Stats>
ファイル記述子の<fs.Stats>を取得します。
詳細については、POSIX の fstat(2)
のドキュメントを参照してください。
fs.fsyncSync(fd)
#
fd
<整数>
オープンファイル記述子のすべてのデータをストレージデバイスにフラッシュするように要求します。具体的な実装はオペレーティングシステムとデバイスに依存します。詳細については、POSIXのfsync(2)
ドキュメントを参照してください。undefined
を返します。
fs.ftruncateSync(fd[, len])
#
ファイル記述子を切り詰めます。undefined
を返します。
詳細については、このAPIの非同期バージョンのドキュメント: fs.ftruncate()
を参照してください。
fs.futimesSync(fd, atime, mtime)
#
fs.futimes()
の同期バージョン。undefined
を返します。
fs.lchmodSync(path, mode)
#
シンボリックリンクのパーミッションを変更します。undefined
を返します。
このメソッドは macOS でのみ実装されています。
詳細はPOSIXのlchmod(2)
ドキュメントを参照してください。
fs.lchownSync(path, uid, gid)
#
パスの所有者を設定します。undefined
を返します。
詳細については、POSIXのlchown(2)
ドキュメントを参照してください。
fs.lutimesSync(path, atime, mtime)
#
path
によって参照されるシンボリックリンクのファイルシステムタイムスタンプを変更します。パラメータが正しくない場合、または操作が失敗した場合はundefined
を返すか、例外をスローします。これは、fs.lutimes()
の同期バージョンです。
fs.linkSync(existingPath, newPath)
#
existingPath
からnewPath
への新しいリンクを作成します。詳細については、POSIXのlink(2)
ドキュメントを参照してください。undefined
を返します。
fs.lstatSync(path[, options])
#
path
<文字列> | <Buffer> | <URL>options
<Object>bigint
<boolean> 返される <fs.Stats> オブジェクトの数値がbigint
であるべきかどうか。デフォルト:false
。throwIfNoEntry
<boolean> ファイルシステムエントリが存在しない場合に、undefined
を返すのではなく例外をスローするかどうか。デフォルト:true
。
- 戻り値: <fs.Stats>
path
によって参照されるシンボリックリンクの<fs.Stats>を取得します。
詳細はPOSIXのlstat(2)
ドキュメントを参照してください。
fs.mkdirSync(path[, options])
#
ディレクトリを同期的に作成します。undefined
を返すか、recursive
がtrue
の場合は、最初に作成されたディレクトリパスを返します。これは、fs.mkdir()
の同期バージョンです。
詳細はPOSIXのmkdir(2)
ドキュメントを参照してください。
fs.mkdtempSync(prefix[, options])
#
prefix
<string> | <Buffer> | <URL>options
<string> | <Object>encoding
<string> デフォルト:'utf8'
- 戻り値: <string>
作成されたディレクトリパスを返します。
詳細については、このAPIの非同期バージョンのドキュメント: fs.mkdtemp()
を参照してください。
オプションの options
引数には、エンコーディングを指定する文字列、または使用する文字エンコーディングを指定する encoding
プロパティを持つオブジェクトを指定できます。
fs.opendirSync(path[, options])
#
ディレクトリを同期的に開きます。opendir(3)
を参照してください。
<fs.Dir> を作成します。これには、ディレクトリからの読み取りとクリーンアップのすべての追加機能が含まれています。
encoding
オプションは、ディレクトリを開く際と、後続の読み取り操作時の path
のエンコーディングを設定します。
fs.openSync(path[, flags[, mode]])
#
path
<文字列> | <Buffer> | <URL>flags
<string> | <number> デフォルト:'r'
。 ファイルシステムのflags
のサポートを参照してください。mode
<string> | <integer> デフォルト:0o666
- 戻り値: <number>
ファイル記述子を表す整数を返します。
詳細については、このAPIの非同期バージョンのドキュメント: fs.open()
を参照してください。
fs.readdirSync(path[, options])
#
path
<文字列> | <Buffer> | <URL>options
<string> | <Object>- 戻り値: <string[]> | <Buffer[]> | <fs.Dirent[]>
ディレクトリの内容を読み取ります。
詳細については、POSIX のreaddir(3)
ドキュメントを参照してください。
オプションのoptions
引数は、エンコーディングを指定する文字列、または返されるファイル名に使用する文字エンコーディングを指定するencoding
プロパティを持つオブジェクトにすることができます。 encoding
が'buffer'
に設定されている場合、返されるファイル名は<Buffer>オブジェクトとして渡されます。
options.withFileTypes
がtrue
に設定されている場合、結果には<fs.Dirent>オブジェクトが含まれます。
fs.readFileSync(path[, options])
#
path
<string> | <Buffer> | <URL> | <integer> ファイル名またはファイル記述子options
<Object> | <string>encoding
<string> | <null> デフォルト:null
flag
<string> ファイルシステムのflags
のサポート を参照してください。デフォルト:'r'
。
- 戻り値: <string> | <Buffer>
path
の内容を返します。
詳細については、このAPIの非同期バージョンのドキュメント: fs.readFile()
を参照してください。
encoding
オプションが指定されている場合、この関数は文字列を返します。それ以外の場合は、バッファを返します。
fs.readFile()
と同様に、パスがディレクトリの場合、fs.readFileSync()
の動作はプラットフォーム固有です。
import { readFileSync } from 'node:fs';
// macOS, Linux, and Windows
readFileSync('<directory>');
// => [Error: EISDIR: illegal operation on a directory, read <directory>]
// FreeBSD
readFileSync('<directory>'); // => <data>
fs.readlinkSync(path[, options])
#
path
<文字列> | <Buffer> | <URL>options
<string> | <Object>encoding
<string> デフォルト:'utf8'
- 戻り値: <string> | <Buffer>
シンボリックリンクの文字列値を返します。
詳細については、POSIX の readlink(2)
ドキュメントを参照してください。
オプションの options
引数には、エンコーディングを指定する文字列、または、返されるリンクパスに使用する文字エンコーディングを指定する encoding
プロパティを持つオブジェクトを指定できます。encoding
が 'buffer'
に設定されている場合、返されるリンクパスは <Buffer> オブジェクトとして渡されます。
fs.readSync(fd, buffer, offset, length[, position])
#
fd
<整数>buffer
<Buffer> | <TypedArray> | <DataView>offset
<integer>length
<integer>position
<integer> | <bigint> | <null> デフォルト:null
- 戻り値: <number>
bytesRead
の数を返します。
詳細については、このAPIの非同期バージョンのドキュメント: fs.read()
を参照してください。
fs.readSync(fd, buffer[, options])
#
fd
<整数>buffer
<Buffer> | <TypedArray> | <DataView>options
<Object>- 戻り値: <number>
bytesRead
の数を返します。
上記のfs.readSync
関数と同様に、このバージョンはオプションのoptions
オブジェクトを受け取ります。options
オブジェクトが指定されていない場合は、上記のデフォルト値になります。
詳細については、このAPIの非同期バージョンのドキュメント: fs.read()
を参照してください。
fs.readvSync(fd, buffers[, position])
#
fd
<整数>buffers
<ArrayBufferView[]>position
<integer> | <null> デフォルト:null
- 戻り値: <number> 読み取られたバイト数。
詳細については、このAPIの非同期バージョンのドキュメント: fs.readv()
を参照してください。
fs.realpathSync(path[, options])
#
path
<文字列> | <Buffer> | <URL>options
<string> | <Object>encoding
<string> デフォルト:'utf8'
- 戻り値: <string> | <Buffer>
解決されたパス名を返します。
詳細については、このAPIの非同期バージョンのドキュメントを参照してください: fs.realpath()
。
fs.realpathSync.native(path[, options])
#
path
<文字列> | <Buffer> | <URL>options
<string> | <Object>encoding
<string> デフォルト:'utf8'
- 戻り値: <string> | <Buffer>
同期的なrealpath(3)
です。
UTF8 文字列に変換できるパスのみがサポートされています。
オプションのoptions
引数には、エンコーディングを指定する文字列、または返されるパスに使用する文字エンコーディングを指定するencoding
プロパティを持つオブジェクトを指定できます。encoding
が'buffer'
に設定されている場合、返されるパスは<Buffer>オブジェクトとして渡されます。
Linux では、Node.js が musl libc にリンクされている場合、この関数が動作するためには、procfs ファイルシステムが /proc
にマウントされている必要があります。Glibc にはこの制限はありません。
fs.renameSync(oldPath, newPath)
#
oldPath
からnewPath
にファイル名を変更します。undefined
を返します。
詳細については、POSIXのrename(2)
ドキュメントを参照してください。
fs.rmdirSync(path[, options])
#
path
<文字列> | <Buffer> | <URL>options
<Object>maxRetries
<integer>EBUSY
、EMFILE
、ENFILE
、ENOTEMPTY
、またはEPERM
エラーが発生した場合、Node.js は、試行ごとにretryDelay
ミリ秒ずつ長く線形バックオフ待機で操作を再試行します。このオプションは、再試行の回数を表します。このオプションは、recursive
オプションがtrue
でない場合は無視されます。デフォルト:0
。recursive
<boolean>true
の場合、再帰的なディレクトリ削除を実行します。再帰モードでは、操作は失敗時に再試行されます。デフォルト:false
。非推奨。retryDelay
<integer> 再試行の間隔をミリ秒単位で指定します。このオプションは、recursive
オプションがtrue
でない場合は無視されます。デフォルト:100
。
同期的なrmdir(2)
です。undefined
を返します。
ファイル(ディレクトリではない)に対してfs.rmdirSync()
を使用すると、WindowsではENOENT
エラー、POSIXではENOTDIR
エラーが発生します。
rm -rf
Unixコマンドと同様の動作を得るには、オプション{ recursive: true, force: true }
を指定してfs.rmSync()
を使用してください。
fs.rmSync(path[, options])
#
path
<文字列> | <Buffer> | <URL>options
<Object>force
<boolean>true
の場合、path
が存在しない場合は例外が無視されます。デフォルト:false
。maxRetries
<integer>EBUSY
、EMFILE
、ENFILE
、ENOTEMPTY
、またはEPERM
エラーが発生した場合、Node.js は、試行ごとにretryDelay
ミリ秒ずつ長く線形バックオフ待機で操作を再試行します。このオプションは、再試行の回数を表します。このオプションは、recursive
オプションがtrue
でない場合は無視されます。デフォルト:0
。recursive
<boolean>true
の場合、再帰的なディレクトリ削除を実行します。再帰モードでは、操作は失敗時に再試行されます。デフォルト:false
。retryDelay
<integer> 再試行の間隔をミリ秒単位で指定します。このオプションは、recursive
オプションがtrue
でない場合は無視されます。デフォルト:100
。
ファイルを同期的に削除します(標準POSIX rm
ユーティリティをモデル化)。undefined
を返します。
fs.statSync(path[, options])
#
path
<文字列> | <Buffer> | <URL>options
<Object>bigint
<boolean> 返される <fs.Stats> オブジェクトの数値がbigint
であるべきかどうか。デフォルト:false
。throwIfNoEntry
<boolean> ファイルシステムエントリが存在しない場合に、undefined
を返すのではなく例外をスローするかどうか。デフォルト:true
。
- 戻り値: <fs.Stats>
パスの<fs.Stats>を取得します。
fs.statfsSync(path[, options])
#
path
<文字列> | <Buffer> | <URL>options
<Object>bigint
<boolean> 返される <fs.StatFs> オブジェクトの数値がbigint
であるかどうか。デフォルト:false
。
- 戻り値: <fs.StatFs>
同期的なstatfs(2)
です。path
を含むマウントされたファイルシステムに関する情報を返します。
エラーの場合、err.code
は Common System Errors のいずれかになります。
fs.symlinkSync(target, path[, type])
#
undefined
を返します。
詳細については、このAPIの非同期バージョンのドキュメントを参照してください: fs.symlink()
。
fs.truncateSync(path[, len])
#
ファイルを切り詰めます。undefined
を返します。ファイルディスクリプタを最初の引数として渡すこともできます。この場合、fs.ftruncateSync()
が呼び出されます。
ファイル記述子の受け渡しは非推奨であり、将来的にエラーがスローされる可能性があります。
fs.unlinkSync(path)
#
同期的なunlink(2)
です。undefined
を返します。
fs.utimesSync(path, atime, mtime)
#
undefined
を返します。
詳細については、このAPIの非同期バージョンのドキュメントを参照してください: fs.utimes()
。
fs.writeFileSync(file, data[, options])
#
file
<文字列> | <Buffer> | <URL> | <整数> ファイル名またはファイル記述子data
<文字列> | <Buffer> | <TypedArray> | <DataView>options
<Object> | <string>
undefined
を返します。
mode
オプションは、新しく作成されたファイルにのみ影響します。詳細については、fs.open()
を参照してください。
詳細については、このAPIの非同期バージョンのドキュメントを参照してください: fs.writeFile()
。
fs.writeSync(fd, buffer, offset[, length[, position]])
#
fd
<整数>buffer
<Buffer> | <TypedArray> | <DataView>offset
<integer> デフォルト:0
length
<integer> デフォルト:buffer.byteLength - offset
position
<integer> | <null> デフォルト:null
- 戻り値: <number> 書き込まれたバイト数。
詳細については、このAPIの非同期バージョンのドキュメントを参照してください: fs.write(fd, buffer...)
。
fs.writeSync(fd, buffer[, options])
#
fd
<整数>buffer
<Buffer> | <TypedArray> | <DataView>options
<Object>- 戻り値: <number> 書き込まれたバイト数。
詳細については、このAPIの非同期バージョンのドキュメントを参照してください: fs.write(fd, buffer...)
。
fs.writeSync(fd, string[, position[, encoding]])
#
fd
<整数>string
<string>position
<integer> | <null> デフォルト:null
encoding
<string> デフォルト:'utf8'
- 戻り値: <number> 書き込まれたバイト数。
詳細については、このAPIの非同期バージョンのドキュメントを参照してください: fs.write(fd, string...)
。
fs.writevSync(fd, buffers[, position])
#
fd
<整数>buffers
<ArrayBufferView[]>position
<integer> | <null> デフォルト:null
- 戻り値: <number> 書き込まれたバイト数。
詳細については、このAPIの非同期バージョンのドキュメントを参照してください: fs.writev()
。
共通オブジェクト#
共通オブジェクトは、すべてのファイルシステムAPIバリアント(promise、コールバック、同期)で共有されます。
クラス: fs.Dir
#
ディレクトリ ストリームを表すクラス。
fs.opendir()
、fs.opendirSync()
、またはfsPromises.opendir()
によって作成されます。
import { opendir } from 'node:fs/promises';
try {
const dir = await opendir('./');
for await (const dirent of dir)
console.log(dirent.name);
} catch (err) {
console.error(err);
}
非同期イテレータを使用する場合、イテレータが終了した後、<fs.Dir> オブジェクトは自動的に閉じられます。
dir.close()
#
- 戻り値: <Promise>
ディレクトリの基になるリソース ハンドルを非同期的に閉じます。後続の読み取りはエラーになります。
リソースが閉じられた後に解決されるPromiseが返されます。
dir.close(callback)
#
callback
<Function>err
<Error>
ディレクトリの基になるリソース ハンドルを非同期的に閉じます。後続の読み取りはエラーになります。
リソースハンドルが閉じられた後、callback
が呼び出されます。
dir.closeSync()
#
ディレクトリの基になるリソース ハンドルを同期的に閉じます。後続の読み取りはエラーになります。
dir.path
#
このディレクトリの読み取り専用パス。これはfs.opendir()
、fs.opendirSync()
、またはfsPromises.opendir()
に提供されたものです。
dir.read()
#
- 戻り値: <Promise> <fs.Dirent> | <null> で解決します
readdir(3)
経由で次のディレクトリ エントリを<fs.Dirent>として非同期的に読み取ります。
読み取るディレクトリ エントリがなくなると、<fs.Dirent>、またはnull
で解決されるPromiseが返されます。
この関数によって返されるディレクトリ エントリは、オペレーティング システムの基盤となるディレクトリ メカニズムによって提供されるように、特定の順序にはなっていません。ディレクトリの反復処理中に追加または削除されたエントリは、反復処理の結果に含まれない場合があります。
dir.read(callback)
#
callback
<Function>err
<Error>dirent
<fs.Dirent> | <null>
readdir(3)
経由で次のディレクトリ エントリを<fs.Dirent>として非同期的に読み取ります。
読み取りが完了した後、読み取るディレクトリ エントリがなくなると、callback
が<fs.Dirent>、またはnull
とともに呼び出されます。
この関数によって返されるディレクトリ エントリは、オペレーティング システムの基盤となるディレクトリ メカニズムによって提供されるように、特定の順序にはなっていません。ディレクトリの反復処理中に追加または削除されたエントリは、反復処理の結果に含まれない場合があります。
dir.readSync()
#
- 戻り値: <fs.Dirent> | <null>
次のディレクトリ エントリを<fs.Dirent>として同期的に読み取ります。詳細については、POSIXのreaddir(3)
ドキュメントを参照してください。
読み取るディレクトリ エントリがなくなると、null
が返されます。
この関数によって返されるディレクトリ エントリは、オペレーティング システムの基盤となるディレクトリ メカニズムによって提供されるように、特定の順序にはなっていません。ディレクトリの反復処理中に追加または削除されたエントリは、反復処理の結果に含まれない場合があります。
dir[Symbol.asyncIterator]()
#
- 戻り値: <AsyncIterator> <fs.Dirent>のAsyncIterator
すべてのエントリが読み取られるまで、ディレクトリを非同期的に反復処理します。詳細については、POSIXのreaddir(3)
ドキュメントを参照してください。
非同期イテレーターによって返されるエントリは常に<fs.Dirent>です。dir.read()
からのnull
ケースは内部的に処理されます。
例については、<fs.Dir>を参照してください。
このイテレーターによって返されるディレクトリ エントリは、オペレーティング システムの基盤となるディレクトリ メカニズムによって提供されるように、特定の順序にはなっていません。ディレクトリの反復処理中に追加または削除されたエントリは、反復処理の結果に含まれない場合があります。
クラス: fs.Dirent
#
<fs.Dir>からの読み取りによって返される、ディレクトリ内のファイルまたはサブディレクトリである可能性のあるディレクトリ エントリの表現。ディレクトリ エントリは、ファイル名とファイル タイプのペアの組み合わせです。
さらに、fs.readdir()
またはfs.readdirSync()
がwithFileTypes
オプションをtrue
に設定して呼び出されると、結果の配列は、文字列または<Buffer>ではなく、<fs.Dirent>オブジェクトで埋められます。
dirent.isBlockDevice()
#
- 戻り値: <boolean>
<fs.Dirent>オブジェクトがブロック デバイスを表す場合はtrue
を返します。
dirent.isCharacterDevice()
#
- 戻り値: <boolean>
<fs.Dirent>オブジェクトがキャラクタ デバイスを表す場合はtrue
を返します。
dirent.isDirectory()
#
- 戻り値: <boolean>
<fs.Dirent>オブジェクトがファイル システム ディレクトリを表す場合はtrue
を返します。
dirent.isFIFO()
#
- 戻り値: <boolean>
<fs.Dirent>オブジェクトが先入れ先出し(FIFO)パイプを表す場合はtrue
を返します。
dirent.isFile()
#
- 戻り値: <boolean>
<fs.Dirent>オブジェクトが通常のファイルを表す場合はtrue
を返します。
dirent.isSocket()
#
- 戻り値: <boolean>
<fs.Dirent>オブジェクトがソケットを表す場合はtrue
を返します。
dirent.isSymbolicLink()
#
- 戻り値: <boolean>
<fs.Dirent> オブジェクトがシンボリックリンクを表す場合に true
を返します。
dirent.name
#
この <fs.Dirent> オブジェクトが参照するファイル名です。この値の型は、fs.readdir()
または fs.readdirSync()
に渡された options.encoding
によって決定されます。
dirent.parentPath
#
この <fs.Dirent> オブジェクトが参照するファイルの親ディレクトリへのパスです。
dirent.path
#
dirent.parentPath
を使用してください。dirent.parentPath
のエイリアスです。
クラス: fs.FSWatcher
#
- <EventEmitter> を拡張
fs.watch()
メソッドの呼び出しが成功すると、新しい <fs.FSWatcher> オブジェクトが返されます。
すべての <fs.FSWatcher> オブジェクトは、監視対象の特定のファイルが変更されるたびに 'change'
イベントを発生させます。
イベント: 'change'
#
監視対象のディレクトリまたはファイルで何らかの変更があった場合に発生します。詳細については、fs.watch()
を参照してください。
オペレーティングシステムのサポートによっては、filename
引数が提供されない場合があります。filename
が提供される場合、fs.watch()
が encoding
オプションを 'buffer'
に設定して呼び出された場合は <Buffer> として提供され、それ以外の場合は filename
は UTF-8 文字列になります。
import { watch } from 'node:fs';
// Example when handled through fs.watch() listener
watch('./tmp', { encoding: 'buffer' }, (eventType, filename) => {
if (filename) {
console.log(filename);
// Prints: <Buffer ...>
}
});
イベント: 'close'
#
ウォッチャーが変更の監視を停止したときに発生します。クローズされた <fs.FSWatcher> オブジェクトは、イベントハンドラーではもう使用できません。
イベント: 'error'
#
error
<Error>
ファイルの監視中にエラーが発生した場合に発生します。エラーが発生した <fs.FSWatcher> オブジェクトは、イベントハンドラーではもう使用できません。
watcher.close()
#
指定された <fs.FSWatcher> での変更の監視を停止します。停止すると、<fs.FSWatcher> オブジェクトはもう使用できません。
watcher.ref()
#
- 返り値: <fs.FSWatcher>
呼び出されると、<fs.FSWatcher> がアクティブである限り、Node.js イベントループが終了しないように要求します。watcher.ref()
を複数回呼び出しても効果はありません。
デフォルトでは、すべての <fs.FSWatcher> オブジェクトは「参照」されるため、通常は、以前に watcher.unref()
が呼び出された場合を除き、watcher.ref()
を呼び出す必要はありません。
watcher.unref()
#
- 返り値: <fs.FSWatcher>
呼び出されると、アクティブな <fs.FSWatcher> オブジェクトは、Node.js イベントループがアクティブな状態を維持することを要求しません。イベントループを維持する他のアクティビティがない場合、プロセスは <fs.FSWatcher> オブジェクトのコールバックが呼び出される前に終了する可能性があります。watcher.unref()
を複数回呼び出しても効果はありません。
クラス: fs.StatWatcher
#
- <EventEmitter> を拡張
fs.watchFile()
メソッドの呼び出しが成功すると、新しい <fs.StatWatcher> オブジェクトが返されます。
watcher.ref()
#
- 返り値: <fs.StatWatcher>
呼び出されると、<fs.StatWatcher> がアクティブである限り、Node.js イベントループが終了しないように要求します。watcher.ref()
を複数回呼び出しても効果はありません。
デフォルトでは、すべての <fs.StatWatcher> オブジェクトは「参照」されるため、通常は、以前に watcher.unref()
が呼び出された場合を除き、watcher.ref()
を呼び出す必要はありません。
watcher.unref()
#
- 返り値: <fs.StatWatcher>
呼び出されると、アクティブな <fs.StatWatcher> オブジェクトは、Node.js イベントループがアクティブな状態を維持することを要求しません。イベントループを維持する他のアクティビティがない場合、プロセスは <fs.StatWatcher> オブジェクトのコールバックが呼び出される前に終了する可能性があります。watcher.unref()
を複数回呼び出しても効果はありません。
クラス: fs.ReadStream
#
<fs.ReadStream> のインスタンスは、fs.createReadStream()
関数を使用して作成および返されます。
イベント: 'close'
#
<fs.ReadStream> の基になるファイル記述子が閉じられたときに発生します。
イベント: 'open'
#
fd
<integer> <fs.ReadStream> で使用される整数ファイル記述子。
<fs.ReadStream> のファイル記述子が開かれたときに発生します。
イベント: 'ready'
#
<fs.ReadStream> が使用できる状態になったときに発生します。
'open'
の直後に発生します。
readStream.bytesRead
#
これまでに読み込まれたバイト数。
readStream.path
#
ストリームが読み込んでいるファイルのパス(fs.createReadStream()
の最初の引数で指定されたもの)。path
が文字列として渡された場合、readStream.path
は文字列になります。path
が <Buffer> として渡された場合、readStream.path
は <Buffer> になります。fd
が指定されている場合、readStream.path
は undefined
になります。
readStream.pending
#
基になるファイルがまだ開かれていない場合、つまり 'ready'
イベントが発生する前の場合、このプロパティは true
です。
クラス: fs.Stats
#
<fs.Stats> オブジェクトは、ファイルに関する情報を提供します。
fs.stat()
、fs.lstat()
、fs.fstat()
、およびそれらの同期版から返されるオブジェクトは、この型です。これらのメソッドに渡される options
の bigint
が true の場合、数値は number
ではなく bigint
になり、オブジェクトには Ns
が付加されたナノ秒精度のプロパティが追加されます。
Stats {
dev: 2114,
ino: 48064969,
mode: 33188,
nlink: 1,
uid: 85,
gid: 100,
rdev: 0,
size: 527,
blksize: 4096,
blocks: 8,
atimeMs: 1318289051000.1,
mtimeMs: 1318289051000.1,
ctimeMs: 1318289051000.1,
birthtimeMs: 1318289051000.1,
atime: Mon, 10 Oct 2011 23:24:11 GMT,
mtime: Mon, 10 Oct 2011 23:24:11 GMT,
ctime: Mon, 10 Oct 2011 23:24:11 GMT,
birthtime: Mon, 10 Oct 2011 23:24:11 GMT }
bigint
バージョン
BigIntStats {
dev: 2114n,
ino: 48064969n,
mode: 33188n,
nlink: 1n,
uid: 85n,
gid: 100n,
rdev: 0n,
size: 527n,
blksize: 4096n,
blocks: 8n,
atimeMs: 1318289051000n,
mtimeMs: 1318289051000n,
ctimeMs: 1318289051000n,
birthtimeMs: 1318289051000n,
atimeNs: 1318289051000000000n,
mtimeNs: 1318289051000000000n,
ctimeNs: 1318289051000000000n,
birthtimeNs: 1318289051000000000n,
atime: Mon, 10 Oct 2011 23:24:11 GMT,
mtime: Mon, 10 Oct 2011 23:24:11 GMT,
ctime: Mon, 10 Oct 2011 23:24:11 GMT,
birthtime: Mon, 10 Oct 2011 23:24:11 GMT }
stats.isBlockDevice()
#
- 戻り値: <boolean>
<fs.Stats> オブジェクトがブロックデバイスを表す場合に true
を返します。
stats.isCharacterDevice()
#
- 戻り値: <boolean>
<fs.Stats> オブジェクトがキャラクタデバイスを表す場合に true
を返します。
stats.isDirectory()
#
- 戻り値: <boolean>
<fs.Stats> オブジェクトがファイルシステムのディレクトリを表す場合に true
を返します。
<fs.Stats> オブジェクトが、ディレクトリに解決されるシンボリックリンクで fs.lstat()
を呼び出して取得された場合、このメソッドは false
を返します。これは、fs.lstat()
がシンボリックリンク自体に関する情報を返し、解決先のパスに関する情報を返さないためです。
stats.isFIFO()
#
- 戻り値: <boolean>
<fs.Stats> オブジェクトが FIFO (first-in-first-out) パイプを表す場合に true
を返します。
stats.isFile()
#
- 戻り値: <boolean>
<fs.Stats> オブジェクトが通常のファイルを表す場合に true
を返します。
stats.isSocket()
#
- 戻り値: <boolean>
<fs.Stats> オブジェクトがソケットを表す場合に true
を返します。
stats.isSymbolicLink()
#
- 戻り値: <boolean>
<fs.Stats> オブジェクトがシンボリックリンクを表す場合に true
を返します。
このメソッドは、fs.lstat()
を使用する場合にのみ有効です。
stats.dev
#
ファイルを含むデバイスの数値識別子。
stats.ino
#
ファイルのファイルシステム固有の「Inode」番号。
stats.mode
#
ファイルの種類とモードを記述するビットフィールドです。
stats.nlink
#
ファイルに存在するハードリンクの数です。
stats.uid
#
ファイルを所有するユーザーの数値ユーザー識別子 (POSIX) です。
stats.gid
#
ファイルを所有するグループの数値グループ識別子 (POSIX) です。
stats.rdev
#
ファイルがデバイスを表す場合の数値デバイス識別子です。
stats.size
#
ファイルのサイズ (バイト単位) です。
基盤となるファイルシステムがファイルのサイズ取得をサポートしていない場合、これは 0
になります。
stats.blksize
#
i/o 操作におけるファイルシステムのブロックサイズです。
stats.blocks
#
このファイルに割り当てられたブロック数です。
stats.atimeMs
#
このファイルが最後にアクセスされた時刻を示すタイムスタンプで、POSIX エポックからのミリ秒単位で表されます。
stats.mtimeMs
#
このファイルが最後に変更された時刻を示すタイムスタンプで、POSIX エポックからのミリ秒単位で表されます。
stats.ctimeMs
#
ファイルステータスが最後に変更された時刻を示すタイムスタンプで、POSIX エポックからのミリ秒単位で表されます。
stats.birthtimeMs
#
このファイルの作成時刻を示すタイムスタンプで、POSIX エポックからのミリ秒単位で表されます。
stats.atimeNs
#
オブジェクトを生成するメソッドに bigint: true
が渡された場合にのみ存在します。このファイルが最後にアクセスされた時刻を示すタイムスタンプで、POSIX エポックからのナノ秒単位で表されます。
stats.mtimeNs
#
オブジェクトを生成するメソッドに bigint: true
が渡された場合にのみ存在します。このファイルが最後に変更された時刻を示すタイムスタンプで、POSIX エポックからのナノ秒単位で表されます。
stats.ctimeNs
#
オブジェクトを生成するメソッドに bigint: true
が渡された場合にのみ存在します。ファイルステータスが最後に変更された時刻を示すタイムスタンプで、POSIX エポックからのナノ秒単位で表されます。
stats.birthtimeNs
#
オブジェクトを生成するメソッドに bigint: true
が渡された場合にのみ存在します。このファイルの作成時刻を示すタイムスタンプで、POSIX エポックからのナノ秒単位で表されます。
stats.atime
#
このファイルが最後にアクセスされた時刻を示すタイムスタンプです。
stats.mtime
#
このファイルが最後に変更された時刻を示すタイムスタンプです。
stats.ctime
#
ファイルステータスが最後に変更された時刻を示すタイムスタンプです。
stats.birthtime
#
このファイルの作成時刻を示すタイムスタンプです。
Stat 時間の値#
atimeMs
、mtimeMs
、ctimeMs
、birthtimeMs
プロパティは、対応する時間をミリ秒単位で保持する数値です。その精度はプラットフォーム固有です。オブジェクトを生成するメソッドに bigint: true
が渡されると、プロパティはbigintになり、それ以外の場合はnumbersになります。
atimeNs
、mtimeNs
、ctimeNs
、birthtimeNs
プロパティは、対応する時間をナノ秒単位で保持するbigintです。これらは、オブジェクトを生成するメソッドに bigint: true
が渡された場合にのみ存在します。その精度はプラットフォーム固有です。
atime
、mtime
、ctime
、birthtime
は、さまざまな時刻のDate
オブジェクトによる代替表現です。Date
と数値は関連付けられていません。新しい数値を割り当てたり、Date
値を変更したりしても、対応する代替表現には反映されません。
stat オブジェクト内の時刻には、次の意味があります
atime
"アクセス時間": ファイルデータが最後にアクセスされた時刻。mknod(2)
、utimes(2)
、read(2)
システムコールによって変更されます。mtime
"変更時間": ファイルデータが最後に変更された時刻。mknod(2)
、utimes(2)
、write(2)
システムコールによって変更されます。ctime
"変更時間": ファイルステータスが最後に変更された時刻 (inode データ変更)。chmod(2)
、chown(2)
、link(2)
、mknod(2)
、rename(2)
、unlink(2)
、utimes(2)
、read(2)
、write(2)
システムコールによって変更されます。birthtime
"作成時間": ファイルの作成時間。ファイルが作成されるときに 1 回設定されます。作成時間が利用できないファイルシステムでは、このフィールドには、ctime
または1970-01-01T00:00Z
(つまり、Unix エポックタイムスタンプ0
) が保持される場合があります。この場合、この値はatime
またはmtime
より大きくなる可能性があります。Darwin およびその他の FreeBSD バリアントでは、utimes(2)
システムコールを使用してatime
が現在のbirthtime
より前の値に明示的に設定された場合にも設定されます。
Node.js 0.12 より前では、ctime
は Windows システムで birthtime
を保持していました。0.12 以降、ctime
は「作成時間」ではなくなり、Unix システムでは最初からそうではありませんでした。
クラス: fs.StatFs
#
マウントされたファイルシステムに関する情報を提供します。
fs.statfs()
およびその同期対応物から返されるオブジェクトは、この型です。これらのメソッドに渡される options
の bigint
が true
の場合、数値は number
ではなく bigint
になります。
StatFs {
type: 1397114950,
bsize: 4096,
blocks: 121938943,
bfree: 61058895,
bavail: 61058895,
files: 999,
ffree: 1000000
}
bigint
バージョン
StatFs {
type: 1397114950n,
bsize: 4096n,
blocks: 121938943n,
bfree: 61058895n,
bavail: 61058895n,
files: 999n,
ffree: 1000000n
}
statfs.bavail
#
特権のないユーザーが使用できる空きブロックです。
statfs.bfree
#
ファイルシステム内の空きブロックです。
statfs.blocks
#
ファイルシステム内の合計データブロック数です。
statfs.bsize
#
最適な転送ブロックサイズです。
statfs.ffree
#
ファイルシステム内の空きファイルノードです。
statfs.files
#
ファイルシステム内の合計ファイルノード数です。
statfs.type
#
ファイルシステムの種類です。
クラス: fs.WriteStream
#
- <stream.Writable> を拡張します
<fs.WriteStream> のインスタンスは、fs.createWriteStream()
関数を使用して作成および返されます。
イベント: 'close'
#
<fs.WriteStream> の基になるファイル記述子が閉じられたときに発行されます。
イベント: 'open'
#
fd
<integer> <fs.WriteStream> が使用する整数ファイル記述子。
<fs.WriteStream> のファイルが開かれたときに発行されます。
イベント: 'ready'
#
<fs.WriteStream> が使用できる状態になったときに発行されます。
'open'
の直後に発生します。
writeStream.bytesWritten
#
これまでに書き込まれたバイト数です。書き込みのためにキューに登録されているデータは含まれません。
writeStream.close([callback])
#
callback
<Function>err
<Error>
writeStream
を閉じます。オプションで、writeStream
が閉じられた後に実行されるコールバックを受け取ります。
writeStream.path
#
fs.createWriteStream()
の最初の引数で指定された、ストリームが書き込んでいるファイルへのパスです。path
が文字列として渡された場合、writeStream.path
は文字列になります。path
が <Buffer> として渡された場合、writeStream.path
は <Buffer> になります。
writeStream.pending
#
基になるファイルがまだ開かれていない場合、つまり 'ready'
イベントが発生する前の場合、このプロパティは true
です。
fs.constants
#
ファイルシステム操作で一般的に使用される定数を含むオブジェクトを返します。
FS 定数#
以下の定数は、fs.constants
および fsPromises.constants
によってエクスポートされます。
すべての定数がすべてのオペレーティングシステムで利用できるわけではありません。特に、POSIX固有の定義の多くが利用できないWindowsでは重要です。移植性のあるアプリケーションの場合、使用前にそれらの存在を確認することをお勧めします。
複数の定数を使用するには、ビット単位の OR 演算子 |
を使用します。
例
import { open, constants } from 'node:fs';
const {
O_RDWR,
O_CREAT,
O_EXCL,
} = constants;
open('/path/to/my/file', O_RDWR | O_CREAT | O_EXCL, (err, fd) => {
// ...
});
ファイルアクセス定数#
以下の定数は、fsPromises.access()
、fs.access()
、および fs.accessSync()
に渡される mode
パラメーターとして使用することを目的としています。
定数 | 説明 |
---|---|
F_OK |
ファイルが呼び出し元プロセスに表示されることを示すフラグ。これは、ファイルが存在するかどうかを判断するのに役立ちますが、rwx パーミッションについては何も示しません。モードが指定されていない場合のデフォルトです。 |
R_OK |
ファイルが呼び出し元プロセスによって読み取り可能であることを示すフラグ。 |
W_OK |
ファイルが呼び出し元プロセスによって書き込み可能であることを示すフラグ。 |
X_OK |
ファイルが呼び出し元プロセスによって実行可能であることを示すフラグ。これはWindowsでは効果がありません (fs.constants.F_OK のように動作します)。 |
定義はWindowsでも利用できます。
ファイルコピー定数#
以下の定数は、fs.copyFile()
で使用することを目的としています。
定数 | 説明 |
---|---|
COPYFILE_EXCL |
存在する場合、コピー先のパスがすでに存在する場合、コピー操作はエラーで失敗します。 |
COPYFILE_FICLONE |
存在する場合、コピー操作はコピーオンライトの reflink を作成しようとします。基盤となるプラットフォームがコピーオンライトをサポートしていない場合、フォールバックのコピーメカニズムが使用されます。 |
COPYFILE_FICLONE_FORCE |
存在する場合、コピー操作はコピーオンライトの reflink を作成しようとします。基盤となるプラットフォームがコピーオンライトをサポートしていない場合、操作はエラーで失敗します。 |
定義はWindowsでも利用できます。
ファイルオープン定数#
以下の定数は、fs.open()
で使用することを目的としています。
定数 | 説明 |
---|---|
O_RDONLY |
ファイルを読み取り専用アクセスで開くことを示すフラグ。 |
O_WRONLY |
ファイルを書き込み専用アクセスで開くことを示すフラグ。 |
O_RDWR |
ファイルを読み取り/書き込みアクセスで開くことを示すフラグ。 |
O_CREAT |
ファイルがまだ存在しない場合はファイルを作成することを示すフラグ。 |
O_EXCL |
O_CREAT フラグが設定され、ファイルがすでに存在する場合、ファイルを開く操作が失敗する必要があることを示すフラグ。 |
O_NOCTTY |
パスがターミナルデバイスを識別する場合、パスを開くことで、プロセスが (まだ持っていない場合) そのターミナルをプロセスの制御端末にしないことを示すフラグ。 |
O_TRUNC |
ファイルが存在し、通常のファイルであり、書き込みアクセスでファイルが正常に開かれた場合、その長さがゼロに切り詰められることを示すフラグ。 |
O_APPEND |
データがファイルの最後に追加されることを示すフラグ。 |
O_DIRECTORY |
パスがディレクトリでない場合、open が失敗する必要があることを示すフラグ。 |
O_NOATIME |
ファイルシステムへの読み取りアクセスによって、ファイルに関連付けられた atime 情報が更新されなくなることを示すフラグ。このフラグは Linux オペレーティングシステムでのみ使用できます。 |
O_NOFOLLOW |
パスがシンボリックリンクの場合、open が失敗する必要があることを示すフラグ。 |
O_SYNC |
ファイルが、ファイルの整合性を待機する書き込み操作で同期 I/O 用に開かれることを示すフラグ。 |
O_DSYNC |
ファイルが、データの整合性を待機する書き込み操作で同期 I/O 用に開かれることを示すフラグ。 |
O_SYMLINK |
シンボリックリンクが指しているリソースではなく、シンボリックリンク自体を開くことを示すフラグ。 |
O_DIRECT |
設定すると、ファイルI/Oのキャッシュ効果を最小限に抑える試みが行われます。 |
O_NONBLOCK |
可能な場合、ファイルを非ブロッキングモードで開くことを示すフラグ。 |
UV_FS_O_FILEMAP |
設定すると、ファイルにアクセスするためにメモリファイルマッピングが使用されます。このフラグは Windows オペレーティングシステムでのみ使用できます。他のオペレーティングシステムでは、このフラグは無視されます。 |
Windowsでは、O_APPEND
、O_CREAT
、O_EXCL
、O_RDONLY
、O_RDWR
、O_TRUNC
、O_WRONLY
、および UV_FS_O_FILEMAP
のみが使用可能です。
ファイルタイプ定数#
以下の定数は、ファイルのタイプを判別するために、<fs.Stats>オブジェクトの mode
プロパティで使用することを目的としています。
定数 | 説明 |
---|---|
S_IFMT |
ファイルタイプコードを抽出するために使用されるビットマスク。 |
S_IFREG |
通常のファイルのファイルタイプ定数。 |
S_IFDIR |
ディレクトリのファイルタイプ定数。 |
S_IFCHR |
文字指向のデバイスファイルのファイルタイプ定数。 |
S_IFBLK |
ブロック指向のデバイスファイルのファイルタイプ定数。 |
S_IFIFO |
FIFO/パイプのファイルタイプ定数。 |
S_IFLNK |
シンボリックリンクのファイルタイプ定数。 |
S_IFSOCK |
ソケットのファイルタイプ定数。 |
Windowsでは、S_IFCHR
、S_IFDIR
、S_IFLNK
、S_IFMT
、および S_IFREG
のみが利用可能です。
ファイルモード定数#
以下の定数は、ファイルのアクセス許可を判別するために、<fs.Stats>オブジェクトの mode
プロパティで使用することを目的としています。
定数 | 説明 |
---|---|
S_IRWXU |
所有者による読み取り、書き込み、実行可能を示すファイルモード。 |
S_IRUSR |
所有者による読み取り可能を示すファイルモード。 |
S_IWUSR |
所有者による書き込み可能を示すファイルモード。 |
S_IXUSR |
所有者による実行可能を示すファイルモード。 |
S_IRWXG |
グループによる読み取り、書き込み、実行可能を示すファイルモード。 |
S_IRGRP |
グループによる読み取り可能を示すファイルモード。 |
S_IWGRP |
グループによる書き込み可能を示すファイルモード。 |
S_IXGRP |
グループによる実行可能を示すファイルモード。 |
S_IRWXO |
その他による読み取り、書き込み、実行可能を示すファイルモード。 |
S_IROTH |
その他による読み取り可能を示すファイルモード。 |
S_IWOTH |
その他による書き込み可能を示すファイルモード。 |
S_IXOTH |
その他による実行可能を示すファイルモード。 |
Windowsでは、S_IRUSR
と S_IWUSR
のみが利用可能です。
注意点#
コールバックとPromiseベースの操作の順序付け#
コールバックまたはPromiseベースのメソッドのいずれかを使用する場合、基盤となるスレッドプールによって非同期的に実行されるため、保証された順序はありません。
たとえば、次の例はエラーが発生しやすい可能性があります。これは、fs.stat()
操作が fs.rename()
操作よりも前に完了する可能性があるためです。
const fs = require('node:fs');
fs.rename('/tmp/hello', '/tmp/world', (err) => {
if (err) throw err;
console.log('renamed complete');
});
fs.stat('/tmp/world', (err, stats) => {
if (err) throw err;
console.log(`stats: ${JSON.stringify(stats)}`);
});
一方を呼び出す前に、一方の結果を待機することで、操作を正しく順序付けることが重要です。
import { rename, stat } from 'node:fs/promises';
const oldPath = '/tmp/hello';
const newPath = '/tmp/world';
try {
await rename(oldPath, newPath);
const stats = await stat(newPath);
console.log(`stats: ${JSON.stringify(stats)}`);
} catch (error) {
console.error('there was an error:', error.message);
}
const { rename, stat } = require('node:fs/promises');
(async function(oldPath, newPath) {
try {
await rename(oldPath, newPath);
const stats = await stat(newPath);
console.log(`stats: ${JSON.stringify(stats)}`);
} catch (error) {
console.error('there was an error:', error.message);
}
})('/tmp/hello', '/tmp/world');
または、コールバック API を使用する場合、fs.stat()
の呼び出しを fs.rename()
操作のコールバックに移動します。
import { rename, stat } from 'node:fs';
rename('/tmp/hello', '/tmp/world', (err) => {
if (err) throw err;
stat('/tmp/world', (err, stats) => {
if (err) throw err;
console.log(`stats: ${JSON.stringify(stats)}`);
});
});
const { rename, stat } = require('node:fs/promises');
rename('/tmp/hello', '/tmp/world', (err) => {
if (err) throw err;
stat('/tmp/world', (err, stats) => {
if (err) throw err;
console.log(`stats: ${JSON.stringify(stats)}`);
});
});
ファイルパス#
ほとんどの fs
操作は、文字列、<Buffer>、または file:
プロトコルを使用した <URL> オブジェクトの形式で指定できるファイルパスを受け入れます。
文字列パス#
文字列パスは、絶対または相対ファイル名を識別する UTF-8 文字シーケンスとして解釈されます。相対パスは、process.cwd()
を呼び出すことによって決定される現在の作業ディレクトリを基準に解決されます。
POSIX での絶対パスの使用例
import { open } from 'node:fs/promises';
let fd;
try {
fd = await open('/open/some/file.txt', 'r');
// Do something with the file
} finally {
await fd?.close();
}
POSIX での相対パスの使用例 (process.cwd()
を基準)
import { open } from 'node:fs/promises';
let fd;
try {
fd = await open('file.txt', 'r');
// Do something with the file
} finally {
await fd?.close();
}
ファイルURLパス#
ほとんどの node:fs
モジュール関数では、path
または filename
引数を、file:
プロトコルを使用した <URL> オブジェクトとして渡すことができます。
import { readFileSync } from 'node:fs';
readFileSync(new URL('file:///tmp/hello'));
file:
URLは常に絶対パスです。
プラットフォーム固有の考慮事項#
Windowsでは、ホスト名を持つ file:
<URL> は UNC パスに変換され、ドライブ文字を持つ file:
<URL> はローカルの絶対パスに変換されます。ホスト名がなく、ドライブ文字がない file:
<URL> はエラーになります
import { readFileSync } from 'node:fs';
// On Windows :
// - WHATWG file URLs with hostname convert to UNC path
// file://hostname/p/a/t/h/file => \\hostname\p\a\t\h\file
readFileSync(new URL('file://hostname/p/a/t/h/file'));
// - WHATWG file URLs with drive letters convert to absolute path
// file:///C:/tmp/hello => C:\tmp\hello
readFileSync(new URL('file:///C:/tmp/hello'));
// - WHATWG file URLs without hostname must have a drive letters
readFileSync(new URL('file:///notdriveletter/p/a/t/h/file'));
readFileSync(new URL('file:///c/p/a/t/h/file'));
// TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must be absolute
ドライブ文字を持つ file:
<URL> は、ドライブ文字の直後に区切り文字として :
を使用する必要があります。別の区切り文字を使用するとエラーになります。
他のすべてのプラットフォームでは、ホスト名を持つ file:
<URL> はサポートされておらず、エラーになります
import { readFileSync } from 'node:fs';
// On other platforms:
// - WHATWG file URLs with hostname are unsupported
// file://hostname/p/a/t/h/file => throw!
readFileSync(new URL('file://hostname/p/a/t/h/file'));
// TypeError [ERR_INVALID_FILE_URL_PATH]: must be absolute
// - WHATWG file URLs convert to absolute path
// file:///tmp/hello => /tmp/hello
readFileSync(new URL('file:///tmp/hello'));
エンコードされたスラッシュ文字を持つ file:
<URL> は、すべてのプラットフォームでエラーになります
import { readFileSync } from 'node:fs';
// On Windows
readFileSync(new URL('file:///C:/p/a/t/h/%2F'));
readFileSync(new URL('file:///C:/p/a/t/h/%2f'));
/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
\ or / characters */
// On POSIX
readFileSync(new URL('file:///p/a/t/h/%2F'));
readFileSync(new URL('file:///p/a/t/h/%2f'));
/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
/ characters */
Windowsでは、エンコードされたバックスラッシュを持つ file:
<URL> はエラーになります
import { readFileSync } from 'node:fs';
// On Windows
readFileSync(new URL('file:///C:/path/%5C'));
readFileSync(new URL('file:///C:/path/%5c'));
/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
\ or / characters */
Buffer パス#
<Buffer> を使用して指定されたパスは、主にファイルパスを不透明なバイトシーケンスとして扱う特定の POSIX オペレーティングシステムで役立ちます。このようなシステムでは、1つのファイルパスに複数の文字エンコーディングを使用するサブシーケンスを含めることができます。文字列パスと同様に、<Buffer> パスは相対パスまたは絶対パスの場合があります。
POSIX での絶対パスの使用例
import { open } from 'node:fs/promises';
import { Buffer } from 'node:buffer';
let fd;
try {
fd = await open(Buffer.from('/open/some/file.txt'), 'r');
// Do something with the file
} finally {
await fd?.close();
}
Windowsでのドライブごとの作業ディレクトリ#
Windowsでは、Node.jsはドライブごとのワーキングディレクトリという概念に従います。この挙動は、バックスラッシュなしでドライブパスを使用した場合に確認できます。たとえば、fs.readdirSync('C:\\')
は、fs.readdirSync('C:')
とは異なる結果を返す可能性があります。詳細については、このMSDNページを参照してください。
ファイル記述子#
POSIXシステムでは、すべてのプロセスに対して、カーネルは現在開いているファイルとリソースのテーブルを保持しています。開いている各ファイルには、ファイル記述子と呼ばれる単純な数値識別子が割り当てられます。システムレベルでは、すべてのファイルシステム操作は、これらのファイル記述子を使用して、特定の各ファイルを識別および追跡します。Windowsシステムでは、リソースを追跡するための概念的には類似した別のメカニズムを使用します。ユーザーのために簡略化するため、Node.jsはオペレーティングシステム間の違いを抽象化し、開いているすべてのファイルに数値ファイル記述子を割り当てます。
コールバックベースの fs.open()
および同期の fs.openSync()
メソッドは、ファイルを開き、新しいファイル記述子を割り当てます。割り当てられると、ファイル記述子を使用して、ファイルからのデータの読み取り、ファイルへのデータの書き込み、またはファイルに関する情報の要求を行うことができます。
オペレーティングシステムは、任意の時点で開くことができるファイル記述子の数を制限しているため、操作が完了したら記述子を閉じることが重要です。そうしないと、最終的にアプリケーションがクラッシュするメモリリークが発生します。
import { open, close, fstat } from 'node:fs';
function closeFd(fd) {
close(fd, (err) => {
if (err) throw err;
});
}
open('/open/some/file.txt', 'r', (err, fd) => {
if (err) throw err;
try {
fstat(fd, (err, stat) => {
if (err) {
closeFd(fd);
throw err;
}
// use stat
closeFd(fd);
});
} catch (err) {
closeFd(fd);
throw err;
}
});
PromiseベースのAPIは、数値ファイル記述子の代わりに <FileHandle> オブジェクトを使用します。これらのオブジェクトは、リソースがリークしないようにシステムによってより適切に管理されます。ただし、操作が完了したらそれらを閉じる必要は依然としてあります。
import { open } from 'node:fs/promises';
let file;
try {
file = await open('/open/some/file.txt', 'r');
const stat = await file.stat();
// use stat
} finally {
await file.close();
}
スレッドプールの使用#
すべてのコールバックおよびPromiseベースのファイルシステムAPI (fs.FSWatcher()
を除く) は、libuvのスレッドプールを使用します。これは、一部のアプリケーションで驚くほど否定的なパフォーマンスへの影響をもたらす可能性があります。詳細については、UV_THREADPOOL_SIZE
のドキュメントを参照してください。
ファイルシステムのフラグ#
flag
オプションが文字列を受け取る場所では、以下のフラグが利用可能です。
-
'a'
: ファイルを追記用に開きます。ファイルが存在しない場合は作成されます。 -
'ax'
:'a'
に似ていますが、パスが存在する場合は失敗します。 -
'a+'
: ファイルを読み取りと追記用に開きます。ファイルが存在しない場合は作成されます。 -
'ax+'
:'a+'
に似ていますが、パスが存在する場合は失敗します。 -
'as'
: ファイルを同期モードで追記用に開きます。ファイルが存在しない場合は作成されます。 -
'as+'
: ファイルを同期モードで読み取りと追記用に開きます。ファイルが存在しない場合は作成されます。 -
'r'
: ファイルを読み取り用に開きます。ファイルが存在しない場合は例外が発生します。 -
'rs'
: ファイルを同期モードで読み取り用に開きます。ファイルが存在しない場合は例外が発生します。 -
'r+'
: ファイルを読み取りと書き込み用に開きます。ファイルが存在しない場合は例外が発生します。 -
'rs+'
: ファイルを同期モードで読み取りと書き込み用に開きます。ローカルファイルシステムキャッシュをバイパスするようにオペレーティングシステムに指示します。これは主にNFSマウント上のファイルを開く場合に役立ち、場合によっては古いローカルキャッシュをスキップできます。I/Oパフォーマンスに非常に大きな影響があるため、このフラグが必要な場合を除き、使用はお勧めしません。
これにより、
fs.open()
またはfsPromises.open()
が同期ブロッキングコールになるわけではありません。同期操作が必要な場合は、fs.openSync()
のようなものを使用する必要があります。 -
'w'
: ファイルを書き込み用に開きます。ファイルは(存在しない場合は)作成されるか、(存在する場合は)切り捨てられます。 -
'wx'
:'w'
に似ていますが、パスが存在する場合は失敗します。 -
'w+'
: ファイルを読み取りと書き込み用に開きます。ファイルは(存在しない場合は)作成されるか、(存在する場合は)切り捨てられます。 -
'wx+'
:'w+'
に似ていますが、パスが存在する場合は失敗します。
flag
は、open(2)
でドキュメント化されているように、数値にすることもできます。一般的に使用される定数は fs.constants
から利用できます。Windowsでは、フラグは該当する場合、同等のものに変換されます。たとえば、O_WRONLY
は FILE_GENERIC_WRITE
に、または O_EXCL|O_CREAT
は CreateFileW
で受け入れられる CREATE_NEW
に変換されます。
排他フラグ 'x'
(open(2)
の O_EXCL
フラグ) は、パスが既に存在する場合、操作がエラーを返すようにします。POSIXでは、パスがシンボリックリンクの場合、O_EXCL
を使用すると、リンクが存在しないパスを指している場合でもエラーが返されます。排他フラグは、ネットワークファイルシステムでは機能しない場合があります。
Linux では、ファイルが追加モードで開かれている場合、位置指定書き込みは機能しません。カーネルは position 引数を無視し、常にデータの末尾に追加します。
ファイルを置き換えるのではなく変更するには、flag
オプションをデフォルトの 'w'
ではなく 'r+'
に設定する必要がある場合があります。
一部のフラグの動作はプラットフォーム固有です。そのため、以下の例のように、macOSとLinuxで 'a+'
フラグを使用してディレクトリを開くとエラーが返されます。対照的に、WindowsおよびFreeBSDでは、ファイル記述子または FileHandle
が返されます。
// macOS and Linux
fs.open('<directory>', 'a+', (err, fd) => {
// => [Error: EISDIR: illegal operation on a directory, open <directory>]
});
// Windows and FreeBSD
fs.open('<directory>', 'a+', (err, fd) => {
// => null, <fd>
});
Windowsでは、'w'
フラグを使用して既存の隠しファイルを開く(fs.open()
、fs.writeFile()
、または fsPromises.open()
のいずれかを介して)と、EPERM
で失敗します。既存の隠しファイルは、'r+'
フラグを使用して書き込み用に開くことができます。
fs.ftruncate()
または filehandle.truncate()
への呼び出しを使用して、ファイルの内容をリセットできます。