HttpServerUtility.MapPath可能会锁定文件吗?

时间:2014-04-08 12:54:48

标签: c# asp.net .net concurrency locking

我们的标准ASP.NET应用程序中的两个函数是:

        private static void SaveToFileSystem(AttributeFileAttachment attach, int paId)
    {
        string fileName = GetAttachmentFullName(attach.FileName, paId);
        File.WriteAllBytes(fileName, attach.Content);
    }

    public static string GetAttachmentFullName(string name, int paId)
    {
        HttpContext ctx = Util.Util.GetHttpContext();
        return string.Format("{0}{1}_{2}_{3}",
            ctx.Server.MapPath("<some variable to get the path>" + "attributeFileAttachments\\"),
            ctx.Session.SessionID,
            paId,
            name);
    }

当执行File.WriteAllBytes时,它返回异常:

他进程无法访问该文件&#39; \\ d $ \ Home \\ attributeFileAttachments \&#39;因为它正被另一个进程使用。

本质是两行: ctx.Server.MapPath ...(微软代码) 和File.WriteAllBytes ... 这适用于同一个文件。

事实证明,HttpServerUtility.MapPath锁定文件并使其锁定! 我在官方文档中没有看到任何评论,也没有人看到有人抱怨。

但它不可能是其他任何东西,因为这两条线是连续的。 当我在即时窗口中稍微修改File.WriteAllBytes的fileName时,写入成功,因为该新文件未被锁定。

我注意到的另一件事是,这只发生在一些附件文件中。

感谢您抽出时间和任何建议。

0 个答案:

没有答案
相关问题