Node.js fs.copyFileSync() Function
Last Updated :
08 Oct, 2021
The fs.copyFileSync() method is used to synchronously copy a file from the source path to destination path. Node.js will overwrite the file if it already exists in the destination. The optional mode parameter can be used to specify the behavior of the copy operation.
Syntax:
fs.copyFileSync(src, dest, mode)
Parameters: This method accepts three parameters as mentioned above and described below:
- src: It is a String, Buffer or URL that denotes the source filename to copy.
- dest: It is a String, Buffer or URL that denotes the destination filename that the copy operation would create.
- mode: It is an integer which specifies the behavior of the copy operation. The values can be given predefined constants that have their respective behaviours:
- fs.constants.COPYFILE_EXCL: This constant specifies that the copy operation would fail if the destination filename already exists.
- fs.constants.COPYFILE_FICLONE: This constant specifies that the copy operation would try to create a copy-on-write reflink. A fallback mechanism is used if the platform does not support copy-on-write.
- fs.constants.COPYFILE_FICLONE_FORCE: This constant specifies that the copy operation would try to create a copy-on-write reflink. The operation would fail if the platform does not support copy-on-write, unlike the previous one.
Below examples illustrate the fs.copyFileSync() method in Node.js:
Example 1: This example shows the copy operation of the “hello.txt” file to the “world.txt” file.
javascript
const fs = require( 'fs' );
getCurrentFilenames();
console.log( "\nFile Contents of hello.txt:" ,
fs.readFileSync( "hello.txt" , "utf8" ));
fs.copyFileSync( "hello.txt" , "world.txt" );
getCurrentFilenames();
console.log( "\nFile Contents of world.txt:" ,
fs.readFileSync( "world.txt" , "utf8" ));
function getCurrentFilenames() {
console.log( "\nCurrent files in directory:" );
fs.readdirSync(__dirname).forEach(file => {
console.log(file);
});
}
|
Output:
Current files in directory:
hello.txt
index.js
File Contents of hello.txt: Hello World
Current files in directory:
hello.txt
index.js
world.txt
File Contents of world.txt: Hello World
Example 2: This example shows the failure of the copy operation when the destination already exists.
javascript
const fs = require( 'fs' );
getCurrentFilenames();
console.log( "\nFile Contents of hello.txt:" ,
fs.readFileSync( "hello.txt" , "utf8" ));
try {
fs.copyFileSync( "hello.txt" , "world.txt" ,
fs.constants.COPYFILE_EXCL);
getCurrentFilenames();
console.log( "\nFile Contents of world.txt:" ,
fs.readFileSync( "hello.txt" , "utf8" ));
}
catch (err) {
console.log(err);
}
function getCurrentFilenames() {
console.log( "\nCurrent filenames:" );
fs.readdirSync(__dirname).forEach(file => {
console.log(file);
});
}
|
Output:
Current filenames:
hello.txt
world.txt
index.js
File Contents of hello.txt: Hello World
Error: EEXIST: file already exists, copyfile 'hello.txt' -> 'world.txt'
at Object.copyFileSync (fs.js:1790:3)
at Object. (G:\tutorials\nodejs-fs-copyFileSync\index.js:35:6)
at Module._compile (internal/modules/cjs/loader.js:956:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)
at Module.load (internal/modules/cjs/loader.js:812:32)
at Function.Module._load (internal/modules/cjs/loader.js:724:14)
at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10)
at internal/main/run_main_module.js:17:11 {
errno: -4075,
syscall: 'copyfile',
code: 'EEXIST',
path: 'hello.txt',
dest: 'world.txt'
}
Reference: https://nodejs.org/api/fs.html#fs_fs_copyfilesync_src_dest_mode
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...