2012-02-15 32 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

如果它不是目录的权限,那么也许看看文件是否为只读?