Flutter 有没有办法在带有颤振/飞镖的Windows上列出物理磁盘?
有人知道一种使用颤振列出Windows上物理磁盘的方法吗 我做了很多研究,但什么也找不到。只有,但仅提供对临时位置的访问Flutter 有没有办法在带有颤振/飞镖的Windows上列出物理磁盘?,flutter,dart,Flutter,Dart,有人知道一种使用颤振列出Windows上物理磁盘的方法吗 我做了很多研究,但什么也找不到。只有,但仅提供对临时位置的访问 我怀疑这是不可能的 我认为SDK中没有任何方法提供这样的功能。但是您可以调用另一个可执行文件并解析结果 在Windows中,您可以通过以下方式获得可用驱动器的列表: C:\>wmic logicaldisk获取标题 说明文字 C: E: F: G: Z: 因此,我们可以在Dart中创建以下内容: import 'dart:convert'; import 'dart:io'
我怀疑这是不可能的 我认为SDK中没有任何方法提供这样的功能。但是您可以调用另一个可执行文件并解析结果 在Windows中,您可以通过以下方式获得可用驱动器的列表:
C:\>wmic logicaldisk获取标题
说明文字
C:
E:
F:
G:
Z:
因此,我们可以在Dart中创建以下内容:
import 'dart:convert';
import 'dart:io';
Future<void> main() async {
print(await getDrivesOnWindows()); // (C:, E:, F:, G:, Z:)
}
Future<Iterable<String>> getDrivesOnWindows() async => LineSplitter.split(
(await Process.run('wmic', ['logicaldisk', 'get', 'caption'],
stdoutEncoding: const SystemEncoding()))
.stdout as String)
.map((string) => string.trim())
.where((string) => string.isNotEmpty)
.skip(1);
令人惊叹的!非常感谢你这么做❤ 你知道我怎样才能带回多个值吗?似乎不适用于:
'wmic'、['logicaldisk','get','caption,freespace']、
或'wmic'、['logicaldisk','get','caption','freespace']、
@I.tdelinequent Try:['logicaldisk','get','caption','freespace']
逗号还需要是一个参数。然后会出现一些格式问题,我会适当地添加/format:csv
或其他格式,以使其更易于解析。这很有效!非常感谢您的帮助@I.tdelinkent更新了我的答案,显示了如何解析结果。
import 'dart:convert';
import 'dart:io';
Future<void> main() async {
(await WindowsDrive.getDrives()).forEach(print);
// DriveLetter: C:, FreeSpace: 20392869888
// DriveLetter: E:, FreeSpace: null
// DriveLetter: F:, FreeSpace: 69761130496
// DriveLetter: G:, FreeSpace: 85562028032
// DriveLetter: Z:, FreeSpace: null
}
class WindowsDrive {
final String driveLetter;
final int? freeSpace;
const WindowsDrive(this.driveLetter, this.freeSpace);
// Node,Caption,FreeSpace
factory WindowsDrive.parse(String line) {
final segments = line.split(',');
return WindowsDrive(segments[1], int.tryParse(segments[2]));
}
@override
String toString() => 'DriveLetter: $driveLetter, FreeSpace: $freeSpace';
static Future<Iterable<WindowsDrive>> getDrives() async =>
LineSplitter.split((await Process.run(
'wmic',
[
'logicaldisk',
'get',
'caption',
',',
'freespace',
'/format:csv'
],
stdoutEncoding: const SystemEncoding()))
.stdout as String)
.map((string) => string.trim())
.where((string) => string.isNotEmpty)
.skip(1)
.map((e) => WindowsDrive.parse(e));
}