"进程无法访问该文件,因为它正被另一个进程使用"与图像

Scr*_*rks 9 c# asp.net file-in-use

我已经看到很多这样的问题已经解决了,问题主要是由于流没有被妥善处理.

我的问题略有不同,请点击代码段

 foreach (Images item in ListOfImages)
 {
      newPath = Path.Combine(newPath, item.ImageName + item.ImageExtension);
      File.Create(newPath);

      File.WriteAllBytes(newPath, item.File);
 }
Run Code Online (Sandbox Code Playgroud)

Images自定义结构在哪里,item.File是原始数据byte [].

我的问题是,在WriteAllBytes调用它的行中,抛出异常.消息如下:

The process cannot access the file because it is being used by another process

我再也不知道我怎么会以某种方式进行close这个过程.

Tim*_*ter 21

因为File.Create返回流我会正确处理它:

using(var stream = File.Create(newPath)){}
File.WriteAllBytes(newPath, item.File);
Run Code Online (Sandbox Code Playgroud)

或者您可以使用流直接写入文件:

using (FileStream fs = File.Create(newPath))
{
    fs.Write(item.File, 0, item.File.Length);
}
Run Code Online (Sandbox Code Playgroud)

或者,可能是最简单的,File.WriteAllBytes单独使用:

File.WriteAllBytes(newPath, item.File);
Run Code Online (Sandbox Code Playgroud)

创建一个新文件,将指定的字节数组写入该文件,然后关闭该文件.如果目标文件已存在,则会被覆盖.


Mat*_*zer 5

您声明您的问题与处理流无关,但请查看此 MSDN 文章:

http://msdn.microsoft.com/en-us/library/d62kzs03.aspx

什么File.Create回报?一个文件流!!!

而且,归根结底,如果不存在,为什么要使用File.CreateifFile.WriteAllBytes创建文件?;)

创建一个新文件,将指定的字节数组写入文件,然后关闭文件。如果目标文件已经存在,它会被覆盖。

在 MSDN 上也检查一下:http : //msdn.microsoft.com/en-us/library/system.io.file.writeallbytes.aspx