14

私は長い間これに取り組んできたので、どんな助けでも大歓迎です。そのため、ファイルをダウンロードして、PhantomJSとCasperJSを使用して保存しています。それらは問題ではないことを指摘させてください。ファイルは問題なくダウンロードされます。

問題は、ダウンロード後にNodeJSがファイルを認識または開かないことです。fs.stat、fs.openなどができません。何も機能しません。

すぐにコードを共有しますが、ログは次のとおりです。

Here: bdTcK6hSdownload.csv

[ '2puzZMeLdownload.csv',
  '2s5ICbKNdownload.csv',
  'bdTcK6hSdownload.csv',
  'izIfagwCdownload.csv' ]

fs.js:230

return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);

Error: ENOENT, no such file or directory './caspertemp/bdTcK6hSdownload.csv'

at Object.openSync (fs.js:230:18)
at Object.processCSV (/Users/Home/dev/node_modules/inviter/index.js:64:29)
at /Users/Home/dev/node_modules/inviter/index.js:36:33
at ChildProcess.exithandler (child_process.js:281:7)
at ChildProcess.emit (events.js:70:17)
at maybeExit (child_process.js:361:16)
at Process.onexit (child_process.js:397:5)

ご覧のとおり、作成したファイル名を印刷してから、ディレクトリの内容を印刷して、ファイルを開こうとしています。ご覧のとおり、bdTcK6hSdownload.csvはディレクトリに存在しますが、開くと失敗します。

簡単なコードスニペットは次のとおりです。

console.log('Here: ' + filename);

filenames = fs.readdirSync('./caspertemp/');
console.log(filenames);

var fd = fs.openSync('./caspertemp/' + filename, 'r');
console.log(fd);

この前後にはさらに多くのことが起こっていますが、この基本的な機能が失敗するため、問題はありません。助けてください!これは何週間もしつこいです。

4

4 に答える 4

3

私の推測では、現在の作業ディレクトリの不一致です。casperJS と node.js プロセスを同じディレクトリから開始していますか? どちらも実行時に作業ディレクトリを変更しますか? __dirnameノードが現在実行中の.jsファイルのディレクトリパスを提供するこのようなものを試してください

var path = require("path");
var filename = "bdTcK6hSdownload.csv";
var csvPath = path.resolve(path.join(__dirname, "caspertemp", filename));
console.log(csvPath);
于 2012-02-04T08:14:12.607 に答える
0

別の可能性はタイミングです。

過去に、ファイルエントリがフォルダーにすぐに表示される状況がありましたが、書き込みが終了していないか、ハンドルがまだ解放されていないため、ファイルは使用できません。このような状況では、処理を延期したり、準備ができているかどうかを確認するために他のチェックを行う必要があることは珍しくありません。

そのような場合、再起動によって問題が「修正」される可能性がありますが、それは副作用としてハンドルを解放するか、処理を遅らせるためであり、コードが再試行するときは問題ありません。

于 2015-12-13T16:37:33.613 に答える
0

これは、間違ったパスを指定している場合にのみ発生します。私は同じ問題に遭遇しました。

最初は、ファイルを直接ノード xyz.js で実行していましたが、必要な静的ファイルは同じリポジトリにあります。しかし、npm start を実行すると、コードが上記のエラーをスローしていました。

    fs.js 495 
    return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
    **Error: ENOENT, no such file or directory**

次に、静的リソースを移動し、パスの名前を変更しましたが、機能しました。これがお役に立てば幸いです。

于 2016-12-05T15:32:05.040 に答える