【问题标题】:How to get specific files using fs.readFileSync()如何使用 fs.readFileSync() 获取特定文件
【发布时间】:2017-09-08 21:53:25
【问题描述】:

我试图仅从具有不同文件类型的文件夹中获取音频文件。比如图片、视频等。

我做了一个函数来过滤结果,但它只返回第一个音频文件,我不知道我在做什么错。

咖啡脚本:

@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")

【问题讨论】:

  • 我解决了这个问题。我意识到我收到了错误的数组长度。因为我声明了数组(musicFiles = Array)而没有指定长度。

标签: node.js audio coffeescript atom-editor fs


【解决方案1】:

如果您愿意使用第三方依赖项,请考虑使用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);
});

【讨论】:

  • 我不习惯使用第三方依赖,但会尝试。我如何在我正在处理的包中安装该依赖项?我正在研究原子包。
  • 可以使用npm install globby 或通过项目的package.json 安装依赖项,例如npm install globby -S
【解决方案2】:

这样的事情怎么样:

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

【讨论】:

    猜你喜欢
    • 2015-06-28
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 2019-10-09
    • 1970-01-01
    相关资源
    最近更新 更多