【问题标题】:Fileupload saveas method doesn't overwriteFileupload saveas 方法不会覆盖
【发布时间】:2011-10-27 02:08:11
【问题描述】:

我有一个非常简单的要求,有一个包含图像文件的文件夹,我有一个只有一个上传字段的表单来选择图像并使用相同的现有图像名称保存以覆盖它

protected void ChangeLogo(object sender, EventArgs e)
    {   
        if (!ImageUpload.HasFile)
        {
            ShowPopup("Logo Upload Canceled", "Please upload the image for the logo.", "stop");
        }            
        else //save the image
        {
            string logoPath = Server.MapPath("~/images/home/");
            string filename = "logo.png";

            ImageUpload.SaveAs(logoPath + filename);
        }
    }

我收到一个错误: 拒绝访问路径“C:\inetpub\wwwroot\website\images\home\logo.png” 即使文件夹上有完全的访问控制,但如果我用不同的名称保存它它可以工作,它只会拒绝覆盖,我需要覆盖。本来想先删除图片再保存的,但是太傻了,为什么不能覆盖?

提前致谢

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    天真的解决方案:

    If(File.Exists(logoPath + filename))
        File.Delete(logoPath + filename);
    ImageUpload.SaveAs(logoPath + filename);
    

    【讨论】:

    • 由于FileUpload 使用FileMode.Create,我的直觉是这行不通,这是现有文件的权限问题。
    • 是的,总是删除,你不能指望文件句柄被释放。这也发生在 File.IO.MoveFile vs Copy 然后 Delete。这是一个底层的 Win32 东西。
    • 是的,Kirk,原来是权限问题,要覆盖的图像被标记为只读:S 取消选中后现在可以正常工作了。谢谢大家
    • 由于我认为 ReadOnly 标志是一个老问题,我通常会处理它以摆脱它。首先在所需路径上实例化一个FileInfo,检查其Exists 属性,如果存在,将其IsReadOnly 属性设置为false。只有这样,我才能继续我的事业。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 2015-11-19
    • 2016-08-22
    相关资源
    最近更新 更多