2017-04-12 21 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) 
関連する問題