2016-09-06 11 views
1

私の会社は、IISとVisual Studio 2015を使用して新しいWebサイトを作成しています。フロントエンド(ウェブサイト)、バックエンド(webapi)、BL(ビジネスロジック)。File.open()を使用してWeb APIを開いてファイルを開くことができません

BLはバックエンドとデータベースの間でデータをやり取りするために作成する.dllであり、他にもいくつかの機能を実行します。 BLは、コンソールアプリケーションとして構築することもできます(通常は、私がコードとしてテストを実行するために使用します)。 BLの私の機能の

一つ(これは、これを行う必要がある唯一の機能です。この溶液中の他の機能はまだ...ファイルを開く必要はありません)HTMLファイルを開くために必要

ビン

内に住ん

するvar SR = File.OpenText( "あるmyfile.html")SR

//行うもの

Z:\ ... \ bin \ debug \ myFile.html

これは、コンソールアプリケーションとしてBLを実行するとうまく動作します。しかし、私がそれを.dllとして構築し、私のバックエンドソリューションの.dllを参照すると、特定のフォルダに入れなければそのファイルを見つけることができません。

C:\プログラムファイル(x86の)\ IIS Expressの

私は今、それがどこかに私の溶液または別のフォルダ内から、そのファイルを開くために取得しようとして約3時間を費やして、ないています私が行うことは、IIS Expressフォルダの中では見た目が不自然なように見えるだけですが、私はそれをねじにして、愚かなHTMLが生きている場所よりも重要なことに向かっていると言います。私はこれにはおそらく非常に簡単な答えがあると思うし、もし誰かがそれを指摘できれば非常に感謝しています。

+1

Z:ドライブは、IISの下で実行しているユーザーのために存在します、マップされたドライブを使用すると、確かZあり、ユーザーごとにあるマップされたドライブ名のように聞こえますか?完全なネットワークパスを使用してみてください。 –

答えて

2

指定したファイルパスには、フルパスではなくファイル名のみが含まれています。 File.OpenTextで指定されているパスは、現在の作業ディレクトリとの相対的なものです。MSDN article

dllをデバッグすると、作業フォルダになるようにdllがbinフォルダにコピーされます。展開するときはIIS Expressフォルダに存在するので、それが作業フォルダです。

絶対パスまたは現在の作業ディレクトリを基準にしたディレクトリを入力する場所にファイルを保存する場合は、

string path = @"c:\temp\myFile.html"; 
var sr = File.OpenText(path); 

または

string path = @"~/relativefolder/somewhere/myFile.html"; 
var sr = File.OpenText(path); 
+0

'〜'バージョンがそのまま動作するかどうか分かりませんが、['File.OpenText(Server.MapPath(path))'](https://msdn.microsoft.com/)を呼び出す必要があると思いますen-us/library/system.web.httpserverutility.mappath(v = vs.110).aspx) –

関連する問題