如何在Dart中告诉用户的主目录在哪里?

时间:2014-08-26 04:36:50

标签: dart

我想在文件中存储一小部分信息,在命令行应用程序的运行之间保留。可能最好的位置是用户主目录中的一个小文件。

我想将一个property / config文件写入用户的主目录。对于Windows,Mac和Linux,我怎么知道用户的主目录是什么?我正在使用Dart。

4 个答案:

答案 0 :(得分:5)

识别操作系统,然后对该特定操作系统使用指定的环境变量。您可以从platform读取操作系统/环境变量。对于例如:

  1. OS : String os = Platform.operatingSystem;提供了isLinuxisAndroid等各种检查
  2. Map<String, String> envVars = Platform.environment;
  3. 一个例子:

    import 'dart:io' show Platform, stdout;
    
    void main() {
      String os = Platform.operatingSystem;
      String home = "";
      Map<String, String> envVars = Platform.environment;
      if (Platform.isMacOS) {
        home = envVars['HOME'];
      } else if (Platform.isLinux) {
        home = envVars['HOME'];
      } else if (Platform.isWindows) {
        home = envVars['UserProfile'];
      }
      stdout.writeln(home);
    }
    

    从这里取得的主页:http://en.wikipedia.org/wiki/Home_directory

答案 1 :(得分:2)

我无法访问Windows机器,但我在pub中找到了这个逻辑:

  if (Platform.environment.containsKey('PUB_CACHE')) {
    cacheDir = Platform.environment['PUB_CACHE'];
  } else if (Platform.operatingSystem == 'windows') {
    var appData = Platform.environment['APPDATA'];
    cacheDir = path.join(appData, 'Pub', 'Cache');
  } else {
    cacheDir = '${Platform.environment['HOME']}/.pub-cache';
  }

对于Linux和Mac,我们可以这样做:

Platform.environment['HOME']

对于Windows,最好在Platform.environment['APPDATA']

中查找位置

答案 2 :(得分:0)

这样做:

String get userHome =>
    Platform.environment['HOME'] ?? Platform.environment['USERPROFILE'];

答案 3 :(得分:0)

类似于其他答案:

// Get the home directory or null if unknown.
String homeDirectory() {
  switch (Platform.operatingSystem) {
    case 'linux':
    case 'macos':
      return Platform.environment['HOME'];
    case 'windows':
      return Platform.environment['USERPROFILE'];
    case 'android':
      // Probably want internal storage.
      return '/storage/sdcard0';
    case 'ios':
      // iOS doesn't really have a home directory.
      return null;
    case 'fuchsia':
      // I have no idea.
      return null;
    default:
      return null;
  }
}

您可以根据需要调整它的行为方式。我确实尝试找出 Fuchsia 的答案,但老实说,我无法弄清楚它是否有主目录!