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



我已经看到了许多已经解决的问题,问题主要是由于流无法正确处理。

我的问题略有不同,这里遵循代码段

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

其中Images是自定义结构,而item.File是原始数据,字节[]。

我的问题是,在称为WriteAllBytes的线上,抛出了一个例外。消息读取:

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

再次我不知道如何以某种方式 close

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

using(var stream = File.Create(newPath)){}
File.WriteAllBytes(newPath, item.File);

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

using (FileStream fs = File.Create(newPath))
{
    fs.Write(item.File, 0, item.File.Length);
}

或最简单的是,单独使用File.WriteAllBytes

File.WriteAllBytes(newPath, item.File);

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

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

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

File.Create返回什么?文件stream !!!!

,在一天结束时,如果File.WriteAllBytes创建文件(如果不存在),为什么使用File.Create?;)

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

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

using (FileStream fs = 
new FileStream(filePath,
    FileMode.Open, FileAccess.Read, FileShare.ReadWrite))

您的日志可能会锁定,因此请尝试使用FileShare.ReadWrite。

创建方法打开编写文件,并返回fileStream对象供您使用。仅仅因为您没有引用它并不意味着它不需要返回。

foreach (Images item in ListOfImages)
                {
                    newPath = Path.Combine(newPath, item.ImageName + item.ImageExtension);
                    FileStream f = File.Create(newPath);
                    f.Write(item.File, 0, item.File.Length);
                }

File.WriteAllBytes必要时会创建文件。您可以使用:

使用:
foreach (Images item in ListOfImages)
{
    newPath = Path.Combine(newPath, item.ImageName + item.ImageExtension);
    File.WriteAllBytes(newPath, item.File);
}

您是否正确组合了路径?

这是完成您要做的事情的最具体方法:

foreach (Images item in ListOfImages)
{
    using (System.IO.FileStream output = new System.IO.FileStream(Path.Combine(newPath, item.ImageName + item.ImageExtension),
        System.IO.FileMode.Create, System.IO.FileAccess.Write))
    {
        output.Write(item.File, 0, item.File.Length);
        output.Flush();
        output.Close();
    }
}

您还需要修复逻辑以创建路径,这是我在上面示例中所做的。您一遍又一遍地连接新路径。

迫使垃圾收集器清洁。

GC.Collect();

相关内容

  • 没有找到相关文章

最新更新