2012-02-15 54 views
0

奇怪的是,像System.IO.File.Delete()這樣的東西工作 和文件被刪除,但會給「訪問.Move()操作的路徑被拒絕錯誤。 所有文件都位於同一個文件夾中,用戶的「網絡服務」擁有所有 完全控制該文件夾中它等ASP.NET:嘗試重命名文件但獲取「訪問路徑」拒絕錯誤

文件夾位於項目目錄中,可以在Solution Explorer中可以看出權和所有子文件夾。

異常詳細信息:System.UnauthorizedAccessException:對路徑的訪問被拒絕。

 foreach(var info in FileActions.Where(x => x.OldSortOrder != x.SortOrder)) 
    { 
     string FileToRename; 
     string NewName; 
     string OldFilePath; 
     string OldFileThumbPath; 


      FileToRename = info.ProductID + "/" + info.OldSortOrder + "-" + info.ImageID + ".jpg"; 
      NewName = info.SortOrder + "-" + info.ImageID + ".jpg"; 
      OldFilePath = System.Web.HttpContext.Current.Request.MapPath("~/Content/ProductImages/" + FileToRename); 
      OldFileThumbPath = System.Web.HttpContext.Current.Request.MapPath("~/Content/ProductImages/" + info.ProductID + "/thumbs/" + FileToRename); 

      System.IO.File.Move(OldFilePath, NewName); 
      System.IO.File.Move(OldFileThumbPath, NewName); 



    } 
+1

你檢查了你試圖保存文件的文件夾是不是隻讀,並有權寫入 – 2012-02-15 12:16:02

+0

我有,但我只是去檢查,他們被設置爲只讀,然後我再次將其解除,但它去了回到只讀狀態!我以Admin身份登錄。 – LaserBeak 2012-02-15 12:21:22

回答

3

它是因爲你映射的第一個文件的路徑,但不是NewName

因此,沒有完整的路徑知道要重命名/移動文件,並且需要完整的路徑才能正常工作。

如果沒有這個路徑,可能會嘗試將它移動到可能沒有此權限的asp.net池的默認文件夾中。

因此,代碼將

NewName = System.Web.HttpContext.Current.Request.MapPath("~/Content/ProductImages/" 
    + info.SortOrder + "-" + info.ImageID + ".jpg"); 

和調試這行,看看目錄和文件是正確的。

+0

就是這樣。不知道我必須爲尚不存在的文件做MapPath。 – LaserBeak 2012-02-15 12:44:10

+0

@LaserBeak映射路徑僅添加〜符號所在的應用程序路徑。 – Aristos 2012-02-15 12:45:30

0

如果它不是目錄的權限,那麼也許看看文件是否爲只讀?