В настоящее время у меня есть функция findFile, которую я использую в forEach L oop, чтобы перебрать массив имен файлов и затем предоставить новый массив путей файловой системы для каждого из имен файлов в исходном массиве:
var dir = 'Some File System Path';
const fs = require('fs');
const findFile = function (dir, pattern) {
var results = [];
fs.readdirSync(dir).forEach(function (dirInner) {
dirInner = path.resolve(dir, dirInner);
var stat = fs.statSync(dirInner);
if (stat.isDirectory()) {
results = results.concat(findFile(dirInner, pattern));
}
if (stat.isFile() && dirInner.endsWith(pattern)) {
results.push(dirInner);
}
});
return results;
};
var newFileArr = ['1.txt', 'file2.txt', 'file3.txt', 'file4.txt']
function fpArr(newFileArr) {
const fpArray = [];
newFileArr.forEach((file => {
fpArray.push(findFile(dir, file).toString())
//console.log(fpArray)
}));
OutPut:
[
/some/file/path/file1.txt,
/some/file/path/1.txt,
/some/file/path/file2.txt,
/some/file/path/file3.txt,
/some/file/path/file4.txt
]
Проблема, с которой я сталкиваюсь, заключается в том, что findFile ищет совпадение с шаблоном и выбирает путь для «1.txt», предположительно при поиске «file1.txt». ». Я знаю, что это крайний случай, но это важный крайний случай, потому что другие имена файлов могут заканчиваться теми же буквами или цифрами, и я не хочу, чтобы они были выбраны в выводе массива пути файла. Я пробовал несколько идей, таких как .match () и .startsWith, однако они будут работать только со строковым литералом или regEx, насколько я могу судить, что приводит к сбою самого поиска. Я смотрю, чтобы увидеть, есть ли способ получить функцию findFile для точного соответствия на основе переменной некоторого строкового значения? Любая помощь в правильном направлении приветствуется.
[
'K_01.00.0000.iar',
'HELLOWORLDKLA_01.00.0000.iar',
'HELLO_KLA_01.00.0000.iar',
'KLA_01.22.7895.iar',
'KLA_HELLO_WORLD_2_01.00.0000.iar',
'KLA_02_WORLD_01.00.0000.iar'
]
[]
Выше приведены 2 массива, с которыми я работаю. Первый массив - это просто массив имен файлов. Нижний массив прошел через syn c и ваше решение async / await. По какой-то причине даже с добавленным RegExp он по-прежнему выбирает 2 файла, которые не перечислены в массиве имени файла. Я добавил пути к файлам, чтобы показать, что ни один из файлов не находится в каталоге root, и разложил файлы по подкаталогам, чтобы убедиться, что рекурсивный поиск работает. Я буду продолжать возиться с этим, чтобы понять, смогу ли я выяснить, почему решение RegExp переносит эти файлы в массив, когда их не должно быть ...