[ASP.NET] 檔案讀寫權限問題

时间:2023-03-08 16:38:57
[ASP.NET] 檔案讀寫權限問題

今天遇到一個問題,環境如下:

IIS Server: Server 2008 R2 沒加域

File Server: Server 2003 加域

當我的Web程序需要把位於File Server的一個EXCEL檔當成資料庫時卻發生拒絕存取的問題

public ActionResult CNC()
{
//1.把EXCEL複製到本機
if (!System.IO.Directory.Exists(@"D:\System Temp"))
{
// 目录不存在,建立目录
System.IO.Directory.CreateDirectory(@"D:\System Temp");
} //String sourcePath = Server.MapPath("~/Public/CNC機台狀態表.xlsx");
string sourcePath = @"\\192.168.2.5\公共区\mis\Ren\Temp\CNC機台狀態表.xlsx";
String targetPath = @"D:\System Temp\CNC機台狀態表.xlsx";
bool isrewrite = true; // true=覆盖已存在的同名文件,false则反之
System.IO.File.Copy(sourcePath, targetPath, isrewrite);
//2.取得所有資料
DataTable dt = new DataTable();
string excelPath = targetPath;
string strCon = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelPath + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1'";
OleDbConnection myConn = new OleDbConnection(strCon);
string strCom = "SELECT count(*) FROM [機台總表$]";
myConn.Open();
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn); myCommand.Fill(dt); try
{
myCommand.Fill(dt);
}
catch (Exception)
{
}
myConn.Close();
ViewBag.Result = dt.Rows[][].ToString();
ViewBag.Message = WindowsIdentity.GetCurrent().Name;
return View();
}

可以按以下思路解決:

1.查看你的WEB程序用什麼認證去存取檔案

ViewBag.Message = WindowsIdentity.GetCurrent().Name;

顯示如下:

[ASP.NET] 檔案讀寫權限問題

然後去IIS管理器→應用程序池改變標示,改成有存取該EXCEL檔案的帳號即可。

[ASP.NET] 檔案讀寫權限問題

2.如果搞了很久發現問題依舊存在,試著把所有的SERVER加在同一個域試試。