在nodejs中列出分区

ejk8hzay  于 2023-06-05  发布在  Node.js
关注(0)|答案(5)|浏览(607)

我想在windows中获取分区列表,使用nodejs。fs.readdir可以很好的工作在任何文件夹下面或者包括C:,但是我不知道该给予它什么来拥有像“C:“,“D:“这样的分区列表。
有人知道我应该用什么吗?

eqfvzcg8

eqfvzcg81#

node.js中没有列出分区的API。一种解决方法是使用child_process并执行wmic命令(或任何可以列出分区的命令)。

var spawn = require('child_process').spawn,
    list  = spawn('cmd');

list.stdout.on('data', function (data) {
  console.log('stdout: ' + data);
});

list.stderr.on('data', function (data) {
  console.log('stderr: ' + data);
});

list.on('exit', function (code) {
  console.log('child process exited with code ' + code);
});

list.stdin.write('wmic logicaldisk get name\n');
list.stdin.end();
xtfmy6hx

xtfmy6hx2#

不确定它是否与您正在寻找的内容完全匹配,但我们构建了一个名为drivelist的NodeJS模块,它将返回一个连接的驱动器数组及其各自的挂载点(例如:在Windows中安装字母):

[
    {
        device: '\\\\.\\PHYSICALDRIVE0',
        description: 'WDC WD10JPVX-75JC3T0',
        size: '1000 GB'
        mountpoint: 'C:',
        system: true
    },
    {
        device: '\\\\.\\PHYSICALDRIVE1',
        description: 'Generic STORAGE DEVICE USB Device',
        size: '15 GB'
        mountpoint: 'D:',
        system: false
    }
]

不可移动的驱动器被标记为system: false,如果这就是你要找的,你可以通过该属性进行过滤。
这个模块的主要优点是它可以在所有主要的操作系统中工作。
参见https://github.com/resin-io-modules/drivelist

doinxwow

doinxwow3#

我的两分钱:
略有增强-一个函数与回调,便于集成,返回一个数组的驱动器:

/**
 * Get windows drives
 * */
function get_win_drives(success_cb,error_cb){
    var stdout = '';
    var spawn = require('child_process').spawn,
            list  = spawn('cmd');

    list.stdout.on('data', function (data) {
        stdout += data;
    });

    list.stderr.on('data', function (data) {
        console.log('stderr: ' + data);
    });

    list.on('exit', function (code) {
        if (code == 0) {
            console.log(stdout);
            var data = stdout.split('\r\n');
            data = data.splice(4,data.length - 7);
            data = data.map(Function.prototype.call, String.prototype.trim);
            success_cb(data);
        } else {
            console.log('child process exited with code ' + code);
            error_cb();
        }
    });
    list.stdin.write('wmic logicaldisk get caption\n');
    list.stdin.end();
}
hujrc8aj

hujrc8aj4#

简单一点的实现:

const exec = require('child_process').exec;
exec('wmic logicaldisk get name', (error, stdout, stderr) => {
  if (error) {
    console.error(`exec error: ${error}`);
    return;
  }
  console.log('stdout ', stdout);
  console.log('stderr ', stderr);
});
k0pti3hp

k0pti3hp5#

let arr = []
for(let i = 65; i < 91; i++) if (fs.existsSync(`${String.fromCharCode(i)}:`)) arr.push(String.fromCharCode(i))
console.log(arr)

相关问题