2011-02-28 59 views

回答

3

如果你想相對於您的應用程序駐留(相對於當前工作目錄,這可能是不同的),你可以做以下的目錄路徑:

module Path = 
    let appDir = AppDomain.CurrentDomain.SetupInformation.ApplicationBase 
    let makeAppRelative fileName = System.IO.Path.Combine(appDir, fileName) 

//Usage 
let fullPath = Path.makeAppRelative "myfile.txt" 
3

相對路徑是這樣規定的:

System.IO.File.ReadAllLines("myfile.txt"); 

myfile.txt相對於執行你的應用程序的工作目錄將搜索。它的工作原理也與子文件夾:

System.IO.File.ReadAllLines(@"sub\myfile.txt"); 

MapPath功能你指的是在你的問題在ASP.NET應用程序中使用,並允許您檢索給它的虛擬路徑的文件的絕對路徑。例如:

Server.MapPath("~/foo/myfile.txt") 

,如果你的網站是在c:\wwwroot\mysite託管它將返回c:\wwwroot\mysite\foo\myfile.txt

+0

+1,這麼好看的發佈!謝謝。 –

3

您可以將相對路徑傳遞給接受文件路徑的任何函數,並且它將正常工作。

+1

我的建議是永遠不要這樣做。這使用當前的工作目錄,這是一個全局變量,任何其他代碼在進程中都可以(並且經常會)在後臺線程中不斷變化,等等。危險!我已經被這麼咬了,我實際上已經編寫了圍繞.NET API的包裝器,如果路徑是非絕對的,就會斷言它只是爲了確保我永遠不依賴於全局狀態。 – Brian

+1

@Brian:是的;這通常是個壞主意,但這似乎正是他想要做的。據推測,他意識到這些問題。 – SLaks