I want to write a file to the current script folder's parent folder (and sometimes subdirectories to that parent folder)?
How should I write the path?
Can this work?
fs.writeFile(__dirname + '../sibling_dir/file.txt', 'test');
I tried this;
fs.writeFile('../test.txt', 'test');
that works!
http://nodejs.org/api/fs.html#fs_fs_write_fd_buffer_offset_length_position_callback
fs.write(fd, buffer, offset, length, position, callback)# Write buffer to the file specified by fd.
offset and length determine the part of the buffer to be written.
position refers to the offset from the beginning of the file where this data should be written. If position is null, the data will be written at the current position. See pwrite(2).
The callback will be given three arguments (err, written, buffer) where written specifies how many bytes were written from buffer.
Note that it is unsafe to use fs.write multiple times on the same file without waiting for the callback. For this scenario, fs.createWriteStream is strongly recommended.
On Linux, positional writes don't work when the file is opened in append mode. The kernel ignores the position argument and always appends the data to the end of the file.
__dirname will write the file relative to the current working directory rather than relative to the script file.Another way of approaching it if you know the paths. You would execute the code in current/index.js and you want to create a file as new/sibling_dir/file.txt:
.
├── current
│ └── index.js
└── new
└── sibling_dir
└── file.txt
So in my case what I did was:
// in index.js
const fs = require('fs');
fs.writeFile(__dirname.replace('current', 'new/sibling_dir/') + 'file.txt', 'test');
Basically replacing in the path the current directory by the new one. This executed from index.js in the other directory will be writing test in the new/sibling_dir/file.txt.
path(path.resolve would help you here.)