如何使用 fs.readFileSync() 获取特定文件

How to get specific files using fs.readFileSync()

我正在尝试仅从具有不同文件类型的文件夹中获取音频文件。喜欢图片、视频等..

我做了一个过滤结果的函数,但它只是 returns 我的第一个音频文件我不知道我做错了什么。

咖啡脚本:

@audioFiles = @getAudioFiles()

getAudioFiles: ->

  allFiles = fs.readdirSync(@pathtoMusic.toString())
  musicFiles = Array
  file = 0
  cont = 0

  #-- I also tried with a for loop --#
  #for file of allFiles
  #  fileName = allFiles[file]

  while(file < allFiles.length)
    fileName = allFiles[file++]
    fileExtension = fileName.split('.').pop();

    if(fileExtension is "mp3") or (fileExtension is "MP3")
      musicFiles[cont++] = fileName
    if(fileExtension is "wav") or (fileExtension is "WAV")
      musicFiles[cont++] = fileName
    if(fileExtension is "3gp") or (fileExtension is "3GP")
      musicFiles[cont++] = fileName
    if(fileExtension is "m4a") or (fileExtension is "M4A")
      musicFiles[cont++] = fileName
    if(fileExtension is "webm") or (fileExtension is "WEBM")
      musicFiles[cont++] = fileName

  return musicFiles

有没有办法直接做到这一点,而不需要创建函数或循环。太棒了。像这样。

fileExtensions = ["mp3","m4a","3gp","wav","webm","etc"...]
@audioFiles = fs.readdirSync(pathToMusic,"fileExtencions")

如果您愿意使用第三方依赖项,请考虑使用 globby:

const globby = require('globby');

// Perform a basename-only match if the pattern does not contain
// any slash characters. That is, *.js would be treated as equivalent
// to **/*.js, matching all js files in all directories.
const options = { matchBase: true };
const fileTypes = ['*.mp3', '*.wav', '*.3gp', '*.m4a', '*.webm'];

globby(fileTypes, options).then(paths => {
    console.log(paths);
});

这样的事情怎么样:

getAudioFiles = =>
  fileExtensions = [
    "mp3"
    "m4a"
    "3gp"
    "wav"
    "webm"
    "etc"
  ]
  allFiles = fs.readDirSync @pathtoMusic.toString()
  musicFiles = (file for file in allFiles when file.replace(/.*\./, '') in fileExtensions)