2014-03-03 33 views
3

在Dart中,如果我知道根目錄和文件的相對路徑,如何爲它創建一個文件實例?如果我知道根目錄和相對路徑,如何獲取文件?

Directory root = new Directory("/root"); 
String relativePath = "logs/users.log"; 

如何創建爲users.log文件的實例嗎?

在java中,這是非常簡單的:

new File(root, relativePath); 

但在達特,我無法找到一個簡單的解決方案作爲。

+0

這是不可能的飛鏢SDK。您必須使用第三方軟件。即使Dart SDK爲此也使用外部軟件包。這個事實看起來很奇怪,Dart SDK本身並沒有對這個功能提供最簡單的支持。在這種情況下,這意味着您不能在Dart語言中編寫(單個文件命令行)腳本,因爲這需要您使用其他軟件包。當然,您可以將應用程序(根腳本及其依賴關係)編譯到快照中,但這與您將其作爲具有可讀源代碼的(單個文件)命令行腳本編寫的不同。 – mezoni

回答

3

這是我發現

import 'package:path/path.dart' as path; 

... 

String filePath = path.join(root.path, relativePath); 
filePath = path.normalize(filePath); 
File f = new File(filePath); 
1

加入/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); 
} 
+1

'path.join()'適用於我的相對路徑。如果你想擺脫'../',只需調用'relativePath = path.normalize(relativePath);'。另見我更新的答案。 –

+0

嗨,GünterZöchbauer。感謝您的有用提示。這是一個平臺問題。 '新的Path.Context'似乎是最乾淨的解決方案。 – TastyCatFood

+0

不知道「上下文」。感謝分享 :) –

相關問題