web-dev-qa-db-ja.com

fs.FileRead-> TypeError [ERR_INVALID_ARG_TYPE]:「path」引数は、文字列型、バッファ、またはURLのいずれかである必要があります。未定義の受信タイプ

function openFileDialog() {
  dialog.showOpenDialog(win, {
    properties: ['openFile']
  } , filepath  => {

    if (filepath) {
      fs.writeFile('path.txt', filepath, function (err, data) {
        if (err) console.log(err);
      });
      scanFile(filepath)
    }
  })
}

function scanFile(filepath) {
  if(!filepath || filepath[0] == 'undefined') return;
  console.log(filepath)
  fs.readFile(filepath,"utf8", (err,data) => { // ----> *ERROR*
    if(err) console.log(err);
    var arr = [];
    if (data.substr(-4) === '.mp3' || data.substr(-4) === '.m4a'
    || data.substr(-5) === '.webm' || data.substr(-4) === '.wav'
    || data.substr(-4) === '.aac' || data.substr(-4) === '.ogg'
    || data.substr(-5) === '.opus') {
    arr.Push(files[i]);
  }
  var objToSend = {};
    objToSend.files = arr;
    objToSend.path = filepath;

    win.webContents.send('selected-files', objToSend)
  })  
}  

電子音楽プレイヤーアプリを作ってみました。最初のステップとして、ファイルを開きます。ファイルを開くと、「TypeError [ERR_INVALID_ARG_TYPE]:「path」引数は文字列型、バッファー、またはURLのいずれかでなければなりません。受け取った型は未定義です」というエラーが発生し、エラーメッセージにscanFile(filepath)、fs.readFile(〜 〜)エラーが発生しました。どうすれば修正できますか?

2
SunBathe

scanFileの最初の行は次のようになります。

if(!filepath || filepath[0] == 'undefined') return;

これは、filepathが文字列(またはバッファーまたはURL)ではなく配列であることを示しています。 console.logステートメントの出力をチェックして、これに該当するかどうかを確認します。 ifステートメントはfilepath[0]をチェックしているので、fs.readFile(filepath[0],"utf8", (err,data) => {を読み取るようにコードを更新します。ifステートメントは、filepath[0]が使用する値であることを示しています

2
djheru