2017-04-12 32 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) 
相關問題