質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.03%

fs.renameSyncで移送先のファイルがWindowsから認識されない。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,796

score 37

お世話になります。
ご存じの方見えましたら、解決策について
お知恵お貸し下さい。。。

あるログファイルを作って、
時間が来たらローテーション(下層フォルダへ退避)しようと考えています。

node.jsではリネームを使ってやるのが通例のようだったので、
そのようにやってみました。(他にいい方法が見つからなかったです)

表面上動くコードが出来上がったのですが、
移送後のファイルを削除、移動できません。

エクスプローラ上、アイコンのマークが白紙マークになってしまっていて、
「次の場所にはありません。この項目の場所を確認してから再実行してください・・・」とも出ます。

アトムエディタでは移送後のファイルを編集できるのですが、
WINDOWS付属のメモ帳ではファイルが見つかりませんと出ます。

パーミッションの設定なのかなと思い
fs.chmodSyncで0777を指定してみたりもしましたが
ダメでした。

WINDOWS特有の事象なのでしょうか。。。

var fs = require('fs'),
  dir_msg = __dirname + ('/logs/m/'),
  dir_msg_old = __dirname + ('/logs/m/old/'),
  key0 = 0,
  key1 = 1,
  key2 = 2,
  key3 = 3;

// console.log(dir_msg + key + ".log");
// console.log(dir_msg_old + key + ".log ");
fs.writeFileSync(dir_msg + key0 + ".log", "pppppppppppppp");
fs.writeFileSync(dir_msg + key1 + ".log", "");
fs.writeFileSync(dir_msg + key2 + ".log", "");
fs.writeFileSync(dir_msg + key3 + ".log", "");
fs.renameSync(dir_msg + key0 + ".log", dir_msg_old + key0 + ".log ");
fs.chmodSync(dir_msg_old + key0 + ".log ", 0777);
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

まずファイルの作成、移動、削除ができるか以下のソースで試してみてください。
returnをコメントアウトして順に確認してみてください。
なお、質問の書き方ではファイルに追記できておらず0バイトのファイルが出来上がると思います。
var fs = require('fs');
var old_path    = __dirname + '/old.log';
var new_path    = __dirname + '/new.log';

fs.writeFileSync(old_path, "pppppppppppppp");
return;

// 移動
fs.rename(old_path, new_path, function (err) {
    if (err) throw err;
    console.log('renamed complete');
    return;

    // 削除
    fs.unlink(new_path, function (err) {
        if (err) throw err;
        console.log('unlink complete');
    });

});

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/20 13:36

    buibui80さん、ご回答ありがとうございます。
    頂いたソースは、正常に実行できました。
    作成、移動、削除は出来ているようです。

    私の提示させて頂いたコードでも、作成までは出来るのですが、
    そこから先が出来ていないようです。

    20 Aug 13:23:03 - [nodemon] v1.3.7
    20 Aug 13:23:03 - [nodemon] to restart at any time, enter `rs`
    20 Aug 13:23:03 - [nodemon] watching: *.*
    20 Aug 13:23:03 - [nodemon] starting `node tera.js`
    renamed complete
    unlink complete
    20 Aug 13:23:03 - [nodemon] clean exit - waiting for changes before restart

    キャンセル

  • 2015/08/20 14:47

    作成・移動・削除は出来ていて、エディタで開けないということですね。
    Windowsでの拡張子:logが何と紐付いているかわかりませんので、
    一旦拡張子をtxtに変更してみたらどうでしょうか?
    また、あらかじめエクスプローラー上でテキストファイルを作成しておき、
    それにnodeから書き込んでからメモ帳で開け無いか確認してみたり。

    Windowsのバグの可能性もあるみたいです。
    http://d.hatena.ne.jp/siwon_g/20120801/1343830522

    コマンドプロンプト上でファイルのある階層でdirコマンドを実行してファイルがどうなっているか確認してみるのもありかと。

    キャンセル

  • 2015/08/21 11:56

    buibui80さん、ありがとうございます。

    お恥ずかしい話なのですが、コードを読み返していて原因がわかりました。

    移動先のファイル名が".log "となっており、
    拡張子の後に半角スペースが入っておりました。

    ご迷惑おかけしましたが、無事解決できました。
    ありがとうございました。。。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る