2009-03-30 36 views
11

ASP.Netには、Web経由でユーザーにアクセスできないapp_dataフォルダがあります。私はこのフォルダにファイルを保存し、App_Codeフォルダにあるクラスを使ってこのファイルから読み込みたいと思います。App_CodeフォルダのクラスからApp_Data内のファイルにアクセスする

ここでの現在の作業ディレクトリは、アプリケーションディレクトリではなく、 "c:\"、 "c:\ windows \ system32 \"などのディレクトリになります。だから、 "../App_Data/somefile"のようなものは動作しません。

私はこれをどのように行うことができますプログラム的

私はApp_Dataフォルダ内のファイルにアクセスする方法に見落とさという単純な何かがなければなりませんか?

答えて

19

あなたはとてもようにApp_Dataフォルダにアクセスすることができます。

string appdatafolder = Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath, "App_Data"); 

私は、これはトンを使用していることを実感彼はHttpContextオブジェクトを使用していますが、このコードをカスタムASP.NETメンバーシッププロバイダ(何度も何度もやったことがあります)の中に記述している場合は、HttpContextオブジェクトを使用しても問題ありません。

+4

ありがとうございます、これは適切なスタートを切ってくれました。私はHttpContext.Current.Server.MapPath( "〜/ App_Data/myfilenamehere")のアプローチで、より読みやすく見えました。 – Brian

+0

@Brian - 嬉しいです。 MapPath対PhysicalApplicationPathのパフォーマンスに関しては、このリンクを参照してください:http://dotnetperls.com/Content/PhysicalApplicationPath.aspx時々しかアクセスできない場合は問題はないかもしれませんが、パフォーマンスの違いに気づくのは良いことです。 – CraigTP

6

あなたはコンテキストオブジェクトにアクセスすることはできませんが、その理由は不明です。

コードが要求に応答して実行されている場合、あなたのようにコンテキストにアクセスすることができます - あなたが使用してアプリケーションのルート物理パスに得ることができることを失敗

HttpContext.Current 

: -

HttpRuntime.AppDomainAppPath 
+0

私のクラスは、Webおよびmvcライブラリへの参照を持たないデータレイヤーにあります。このデータクラスは引き続きApp_Dataを使用できますか? HttpRuntimeとHttpContextの両方により、この永続性クラスはWebデプロイメントを認識します。ありがとう –

+0

@ one.beat.consumer:はい、私は実際にあなた自身の質問に答えたと思います。 – AnthonyWJones

+0

本当に、私はちょうどそれを不十分に尋ねました - もっと明確に、私のリポジトリクラスは、 'System.Web'や他のウェブライブラリを参照することなくApp_Dataフォルダに書き込むことができますか?このフォルダにパススルーする他の方法はありますか? –

関連する問題