Есть ли способ получить имя диска для всех логических дисков на компьютере?Перечислить системные диски в nodejs
Я посмотрел fs api, но оттуда я могу только перечислять файлы и каталоги данного каталога.
Есть ли способ получить имя диска для всех логических дисков на компьютере?Перечислить системные диски в nodejs
Я посмотрел fs api, но оттуда я могу только перечислять файлы и каталоги данного каталога.
Как насчет использования команды DiskPart? Выполняется ли в командной строке diskpart list
нужный вам результат? Если так что вы можете выполнить это в узел с помощью child_process.exec
var exec = require('child_process).exec
var cmd = 'diskpart list'
exec(cmd, function(err, stdout, stderr) {
if (err) {
console.log('error running diskpart list command')
console.log(err)
return
}
console.log('stdout data')
console.log(stdout)
console.log('stderr data')
console.log(stderr)
})
Это сработало бы, но я бы хотел избежать запуска дочернего процесса и разбора вывода команды. Но это было бы, вероятно, тем, к чему я прибегу, если в API-интерфейсе нет ничего ... – foobarcode
Я считаю, что это лучшее, что вы собираетесь делать. node.js не имеет никакого способа сделать это изначально. В OSX вы можете прочитать каталог '/ Volumes /', а в linux вы можете посмотреть '/ mnt', но Windows не предоставляет каталог установленных дисков для вас. Также обратите внимание на http://www.computerhope.com/issues/ch000854.htm#2 и wmic logicaldisk получить имя – Noah
Хорошо, что я не знал об этом, спасибо за ваш ответ – foobarcode
Я не уверен, что вы подразумеваете под «имя диска». Если вы имеете в виду дисков в виде \\.\PhysicalDriveN
, я столкнулся с той же проблемой и реализован этот модуль, который работает во всех основных операционных системах:
https://github.com/resin-io/drivelist
Для Windows, вы получите такую информацию, как:
[
{
device: '\\\\.\\PHYSICALDRIVE0',
description: 'WDC WD10JPVX-75JC3T0',
size: '1000 GB'
},
{
device: '\\\\.\\PHYSICALDRIVE1',
description: 'Generic STORAGE DEVICE USB Device',
size: '15 GB'
}
]
Это правильное и кросс-платформенное решение! Если вы создаете приложение в nodejs только для одной ОС, вы делаете это неправильно! – tborychowski
Если вы ориентируетесь на Windows, вы можете попробовать следующее:
Это решение основано на идее от this post.
Я заверну это с обещанием.
var spawn = require("child_process").spawn
function listDrives(){
const list = spawn('cmd');
return new Promise((resolve, reject) => {
list.stdout.on('data', function (data) {
// console.log('stdout: ' + String(data));
const output = String(data)
const out = output.split("\r\n").map(e=>e.trim()).filter(e=>e!="")
if (out[0]==="Name"){
resolve(out.slice(1))
}
// console.log("stdoutput:", out)
});
list.stderr.on('data', function (data) {
// console.log('stderr: ' + data);
});
list.on('exit', function (code) {
console.log('child process exited with code ' + code);
if (code !== 0){
reject(code)
}
});
list.stdin.write('wmic logicaldisk get name\n');
list.stdin.end();
})
}
listDrives().then((data) => console.log(data))
Test, вы увидите результат, как:
["c:", "d:"]
какую систему вы ориентацию? Требуется ли решение для работы на платформе или может быть специфичной для платформы? – Noah
Я нацелился на окна, и мне не нужно быть кросс-платформой – foobarcode