ASP.NETでローカルファイルにアクセスするとアクセスが拒否されることがあります。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
namespace iPentecWebSearch
{
public partial class _default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
FileStream fs = new FileStream(Request.PhysicalApplicationPath + "test.txt", FileMode.Open);
try {
StreamReader sr = new StreamReader(fs);
string text = sr.ReadToEnd();
Literal_SearchTag.Text = text;
sr.Close();
}
finally {
fs.Close();
}
}
}
}
以下のメッセージが表示されWebアプリケーションが実行できません。
FileStream fs = new FileStream(Request.PhysicalApplicationPath + "test.txt", FileMode.Open);
FileStreamなどでFileModeのみを指定してファイルを開いた場合には読み書き込みモードでファイルを開きます。ASP.NETアプリケーションが配置されるIISのコンテンツディレクトリは通常、読み込みのみのアクセス権限のため書き込み権限付きでファイルを開くとファイルアクセスが拒否され上記のメッセージが表示されます。
FileStreamなどでファイルを開く際には読み込み専用モードでファイルを開く動作に変えます。
FileStream fs = new FileStream(
Request.PhysicalApplicationPath + "test.txt", FileMode.Open, FileAccess.Read);
FileStreamの場合は上記のコードのFileAccessを指定する型のコンストラクタを呼び出し、読み込み専用モードでファイルにアクセスします。