LoginSignup
3
1

More than 5 years have passed since last update.

Node.js fs.renameの処理が失敗して[npm ERR! EXDEV: cross-device link not permitted]と謎のエラーが出た

Posted at

事象

ローカルで作ってたNodeのプログラムをVPSにアップロードしたところ、リネーム処理でコケた。

コード

実際のコードはこんな感じ。
(抜粋)

var fs = require('fs');

fs.rename("hoge.txt", "fuga.txt", function (err) {
  if(err){
    //異常処理へ

  }else{
    //正常処理へ
  }
});

ローカルだとうまくいってたんだけどなぁ
Node.jsのバージョン、npmのバージョンも合わせてある状態。
Node.js : v8.11.1
npm : 5.6.0

解決策

StreamAPIでファイルをコピーしてあげて、コピー完了後に元ファイルを消すと言ったやり方で解決。

var fs = require('fs');

fs.createReadStream("hoge.txt").pipe(fs.createWriteStream("fuga.txt")).on('finish',function(err){
  if(err){
    //異常処理へ
  }else{
    //コピーが完了
    fs.unlink("hoge.txt", function(err){
      //ファイル削除完了

    });
  }
});

ちょっとネストが深くなってしまうが何かいい方法は無いものなのか。

StreamAPIの使い方がよくわからないから、もっと勉強しないとな。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1