Node.JS fs.rename не работает
Переименование файла в Debian Wheezy не работает с использованием fs.rename или fs.renameSync.
Это происходит только в файлах, перемещенных из /tmp/ в другое место.
Сообщенная ошибка: EXDEV, связь между устройствами не разрешена.
3 ответа
Debian Wheezy по умолчанию использует tmpfs для папки /tmp.
Это можно отключить, изменив /etc/default/rcS.
RAMTMP=yes
должен быть установлен в
RAMTMP=no
Это еще одно решение, которое работает для меня:
var fs = require("fs"),
util = require('util');
...
//fs.renameSync(files.upload.path, "/tmp/test.png");
var readStream = fs.createReadStream(files.upload.path)
var writeStream = fs.createWriteStream("/tmp/test.png");
util.pump(readStream, writeStream, function() {
fs.unlinkSync(files.upload.path);
});
Столкнулся с этой проблемой, когда не включил имя каталога и относительный путь к файлам (из каталога файлов fileRenameScript.js) к файлам, которые я пытался переименовать.
for(let i=0; i<readdirFileNames.length; i++){
fs.rename(__dirname+”/sample/strings/“+ readdirFileNames[i],
__dirname+”/sample/strings/“+ readdirFileNames[i].split(“trashToRemove”).join(“”),
()=>{
console.log(“File renamed”)
})
}
Это код, который переименовали, чтобы он работал у меня. Если кто-то еще увидит эту проблему, обратитесь к этому коду, чтобы увидеть уровень детализации, необходимый для переименования имен файлов.
Никакой ошибки при условии, что файл не существует, или что-то, что могло бы объяснить, почему имена файлов не менялись. Переименование Fs произошло так же, как если бы оно было успешным. Когда я наконец получил необходимые изменения, ни в том, как выполнялся код, ни в том, что выводилось, не было никаких изменений.
Такое поведение я наблюдал в узле v20.2.0.