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.

Другие вопросы по тегам