Hello, I'm trying to rename file to a destination folder where the user has no access, rename fails with EPERM error correctly, but when the target file exists, it fails immediately, when the target file does not exists, it fails after 60 sec. E.g. my code:
const util = require('util');
const gfsRename = util.promisify(require('graceful-fs').rename);
(async () => {
const start = Date.now();
try {
await gfsRename("somefile.txt", "c:\\Program Files\\somefile.txt");
} catch (err) {
console.log("graceful-fs.rename error in", Date.now() - start, err.message);
}
})();
Since I have no antivirus which would require to use this rename - retry workaround, I am not able to test if such difference is reasoned or a bug.
I think the problem is in the solution of #98 and commit 90a96bc, see also code
|
fs.stat(to, function (stater, st) { |
IMHO
fs.stat result should be checked that target is a directory, too.
Note: to fail fast if AV is blocking the rename, could be possible to open and close target, something like fs.open(src, 'a') ... fs.close(...) ? If so, it may not be part of the library, but could be documented in README.md only, I think.
Hello, I'm trying to rename file to a destination folder where the user has no access,
renamefails withEPERMerror correctly, but when the target file exists, it fails immediately, when the target file does not exists, it fails after 60 sec. E.g. my code:Since I have no antivirus which would require to use this rename - retry workaround, I am not able to test if such difference is reasoned or a bug.
I think the problem is in the solution of #98 and commit 90a96bc, see also code
node-graceful-fs/polyfills.js
Line 107 in 2343799
fs.statresult should be checked that target is a directory, too.Note: to fail fast if AV is blocking the rename, could be possible to open and close target, something like
fs.open(src, 'a')...fs.close(...)? If so, it may not be part of the library, but could be documented in README.md only, I think.