Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 HttpPostedFileBase MVC3中的文件替换_Asp.net Mvc 3_Httppostedfilebase - Fatal编程技术网

Asp.net mvc 3 HttpPostedFileBase MVC3中的文件替换

Asp.net mvc 3 HttpPostedFileBase MVC3中的文件替换,asp.net-mvc-3,httppostedfilebase,Asp.net Mvc 3,Httppostedfilebase,如果文件上载时名称已在指定路径中,则显示错误。我想用新文件替换。我已经放置了错误和代码。请帮助替换现有图像 错误:进程无法访问文件“”,因为另一个进程正在使用该文件 代码: 根据您发布的内容,我建议如下: [HttpPost] public ActionResult Foo(HttpPostedFileBase file) { var path = @"C:\"; var filename = file.FileName; file.SaveAs(System.IO.P

如果文件上载时名称已在指定路径中,则显示错误。我想用新文件替换。我已经放置了错误和代码。请帮助替换现有图像

错误:进程无法访问文件“”,因为另一个进程正在使用该文件

代码:


根据您发布的内容,我建议如下:

[HttpPost]
public ActionResult Foo(HttpPostedFileBase file)
{
    var path = @"C:\";
    var filename = file.FileName;

    file.SaveAs(System.IO.Path.Combine(path, filename));

    // do stuff here.

    return RedirectToAction("Index");
}

我也有同样的问题。我有一个名为“files”的子文件夹,其中我使用
file.SaveAs()
(“file”是“HttpPostedFileBase”类型[使用MVC])上传了文件。经过一些本地调查和在线研究,发现一个IIS工作线程/进程正在锁定我的文件。起初我以为
{HttpPostedFileBase}.SaveAs()
某种程度上锁定了我的文件。我甚至尝试(首先)关闭,然后处理
{HttpPostedFileBase}.InputStream
,但这也没有帮助。最后,它甚至与文件上传过程毫无关系。上传文件(PDF)后,我使用ITextSharp进行处理,但忘记处理对象包装器(因此它可能位于GC中)。因此,由于锁定了现有文件,下一次文件上载失败。顺便说一句,我还尝试了
file.InputStream.Dispose();file.InputStream.Close();GC.Collect(),但最终将它们全部删除,现在仍然可以完美地工作。总之,如果IIS工作进程锁定了您的文件,可能有一个很好的原因——您的代码中缺少了某些东西,而且很可能不是MVC框架或IIS本身流氓另外,事实证明,
{HttpPostedFileBase}.SaveAs()
将覆盖存在的文件,因此无需先删除它们


另一个提示:我在某个地方读了一些文章,以根据您的授权设置(无论您是否使用IIS进程标识或登录的用户标识)来监视谁在创建文件。在某些情况下,一个登录用户可能创建一个文件,然后成为所有者,来自不同用户的另一个同名文件可能被阻止;在特殊情况下(如基于intranet的web应用程序),可能需要记住这一点。

您的文件必须在其他地方打开。您是否处理了用于处理原始文件的任何流?此外,为了上帝的爱,除非你知道自己在做什么,否则不要使用GC.Collect。你定义了两次
filePath
。。。您应该使用
Path.Combine()
。。。您还没有为该文件指定文件名。如果我正在上载新文件,则此操作有效。如果我上传的是同一个文件,它会显示错误。嗯,是的,因为文件已经存在于你试图写它的地方。您必须先移动/删除现有文件。Downvoter在事实发生一年后出现,并且没有留下解释?很好,你的建议没有回答问题。我也遇到过同样的问题,而您的回答无助于解决可能出现的问题。相反,您只是提供了一个更好的为什么加入路径。此外,SaveAs()在覆盖现有文件之前根本不需要删除该文件。
[HttpPost]
public ActionResult Foo(HttpPostedFileBase file)
{
    var path = @"C:\";
    var filename = file.FileName;

    file.SaveAs(System.IO.Path.Combine(path, filename));

    // do stuff here.

    return RedirectToAction("Index");
}