2017-04-12 1 views
0

Ich versuche, nur die Audiodateien aus einem Ordner, der verschiedene Dateitypen hat. Wie Bilder, Videos usw.So erhalten Sie bestimmte Dateien mit fs.readFileSync()

Ich machte eine Funktion, um die Ergebnisse zu filtern, aber es gibt mir nur die erste Audiodatei zurück, die ich nicht weiß, was ich falsch mache.

Coffee:

@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 

Gibt es einen Weg, um es direkt zu tun ?, ohne dass eine Funktion oder eine Schleife zu erstellen. Es wäre fantastisch. Etwas wie das.

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

ich das Problem zu beheben. Ich merke, dass ich eine falsche Array-Länge erhielt. weil ich das Array (musicFiles = Array) deklariert habe, ohne die Länge anzugeben. –

Antwort

1

Wenn Sie ein Drittanbieter-Abhängigkeit zu verwenden offen sind, betrachten globby mit:

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

Ich bin nicht daran gewöhnt, die Abhängigkeit von Drittanbietern zu nutzen, werde es aber versuchen. Wie kann ich diese Abhängigkeit in dem Paket installieren, an dem ich gerade arbeite? Ich arbeite an einem Atompaket. –

+0

Die Abhängigkeit kann mit 'npm install globby' oder über' package.json' Ihres Projekts, z. 'npm install globby -S' – idleberg

0

Wie wäre es etwa so:

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