我想在文件中存储一小部分信息,在命令行应用程序的运行之间保留。可能最好的位置是用户主目录中的一个小文件。
我想将一个property / config文件写入用户的主目录。对于Windows,Mac和Linux,我怎么知道用户的主目录是什么?我正在使用Dart。
答案 0 :(得分:5)
识别操作系统,然后对该特定操作系统使用指定的环境变量。您可以从platform读取操作系统/环境变量。对于例如:
OS : String os = Platform.operatingSystem;
提供了isLinux
,isAndroid
等各种检查Map<String, String> envVars = Platform.environment;
一个例子:
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);
}
答案 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 的答案,但老实说,我无法弄清楚它是否有主目录!