在Dart中,如果我知道根目錄和文件的相對路徑,如何爲它創建一個文件實例?如果我知道根目錄和相對路徑,如何獲取文件?
Directory root = new Directory("/root");
String relativePath = "logs/users.log";
如何創建爲users.log
文件的實例嗎?
在java中,這是非常簡單的:
new File(root, relativePath);
但在達特,我無法找到一個簡單的解決方案作爲。
在Dart中,如果我知道根目錄和文件的相對路徑,如何爲它創建一個文件實例?如果我知道根目錄和相對路徑,如何獲取文件?
Directory root = new Directory("/root");
String relativePath = "logs/users.log";
如何創建爲users.log
文件的實例嗎?
在java中,這是非常簡單的:
new File(root, relativePath);
但在達特,我無法找到一個簡單的解決方案作爲。
這是我發現
import 'package:path/path.dart' as path;
...
String filePath = path.join(root.path, relativePath);
filePath = path.normalize(filePath);
File f = new File(filePath);
/home/name/
和../name2
產生最簡單的辦法/home/name2
謝謝君特Zöchbauer的小費。
看來linux的盒子可以處理像/home/name/../name2
這樣的路徑。
在windows計算機上,需要使用Path.normalize
,必須先移除頭部預先附加的額外/
Path.normalize
。
或者使用新Path.Context():
import 'package:path/path.dart' as Path;
import 'dart:io' show Platform,Directory;
to_abs_path(path,[base_dir = null]){
Path.Context context;
if(Platform.isWindows){
context = new Path.Context(style:Path.Style.windows);
}else{
context = new Path.Context(style:Path.Style.posix);
}
base_dir ??= Path.dirname(Platform.script.toFilePath());
path = context.join(base_dir,path);
return context.normalize(path);
}
'path.join()'適用於我的相對路徑。如果你想擺脫'../',只需調用'relativePath = path.normalize(relativePath);'。另見我更新的答案。 –
嗨,GünterZöchbauer。感謝您的有用提示。這是一個平臺問題。 '新的Path.Context'似乎是最乾淨的解決方案。 – TastyCatFood
不知道「上下文」。感謝分享 :) –
這是不可能的飛鏢SDK。您必須使用第三方軟件。即使Dart SDK爲此也使用外部軟件包。這個事實看起來很奇怪,Dart SDK本身並沒有對這個功能提供最簡單的支持。在這種情況下,這意味着您不能在Dart語言中編寫(單個文件命令行)腳本,因爲這需要您使用其他軟件包。當然,您可以將應用程序(根腳本及其依賴關係)編譯到快照中,但這與您將其作爲具有可讀源代碼的(單個文件)命令行腳本編寫的不同。 – mezoni