2011-02-28 14 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

相対パスは、次のように指定されている... MapPath私は推測のいくつかの並べ替えです:アプリケーションを実行する作業ディレクトリへの相対myfile.txtを検索します

System.IO.File.ReadAllLines("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

関連する問題