flutter - 有什么方法可以使用 Flutter/Dart 在 Windows 上列出物理磁盘?
问题描述
有谁知道使用 Flutter 在 Windows 上列出物理磁盘的方法?
我做了很多研究,但找不到任何东西。只有path_provider,但它只提供对临时位置的访问。
我怀疑这是不可能的...
解决方案
我认为 SDK 中没有任何方法可以提供这样的功能。但是您可以调用另一个可执行文件并解析结果。
在 Windows 中,您可以通过以下方式获取可用驱动器的列表:
C:\>wmic logicaldisk get caption
Caption
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);
一个更复杂的示例,展示了如何为每个驱动器获取多个值。可以为空,因为未连接的freeSpace
网络驱动器(或空的 CD/DVD 驱动器)在询问可用磁盘空间时不返回任何值:
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));
}
推荐阅读
- c++ - 如何在 Direct2D 窗口中正确初始化 Directwrite IDWriteTextLayout
- arrays - 在 foreach 循环中将一些变量添加到数组中
- android - 我如何追踪有影响力的人安装了多少我的 Android 应用程序?
- anylogic - AnyLogic 灵敏度分析可视化
- python - 尽管使用 Pip 安装 Pygame,但无法将 Pygame 导入 Python 3.7 IDLE(64 位)
- java - HHH000327:执行加载命令时出错:org.hibernate.exception.GenericJDBCException:无法提取结果集
- c++ - C++ 为什么 cin 读行两次?
- batch-file - 如何批量取消引用值
- c - 如何将单个字符串分配给一个指针数组中的元素?
- pytorch - 在 Pytorch 中计算 conv1d 层的形状