2017-04-12 312 views
0

我想从仅具有不同文件类型的文件夹中获取音频文件。像图片,视频等..如何使用fs.readFileSync()获取特定文件()

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

的CoffeeScript:

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

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

回答

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); 
}); 
+0

我不习惯使用第三方依赖,但会尝试。我如何在我正在使用的包中安装该依赖项?我正在研究一个原子包。 –

+0

可以使用'npm install globby'或通过项目的'package.json'来安装依赖项,例如, 'npm install globby -S' – idleberg

0

怎么是这样的:

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