Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 有没有办法在带有颤振/飞镖的Windows上列出物理磁盘?_Flutter_Dart - Fatal编程技术网

Flutter 有没有办法在带有颤振/飞镖的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'

有人知道一种使用颤振列出Windows上物理磁盘的方法吗

我做了很多研究,但什么也找不到。只有,但仅提供对临时位置的访问


我怀疑这是不可能的 我认为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));
}