2

当一个一个删除文件时,会生成“进程无法访问该文件,因为它正在被另一个进程在尝试删除文件时使用”

代码:对删除这样的文件有什么建议吗?

      private void DeleteFilesFromDestination()
      {
           string consolidatedFolder = System.Configuration.ConfigurationManager.AppSettings["path"].ToString();

           foreach (String file in ListBoxDeleteFiles.Items)
           {
                try
                {
                     // delete each selected files from the specified TargetFolder 
                     if (System.IO.File.Exists(consolidatedFolder + @"\" + System.IO.Path.GetFileName(file)))
                     {
                         proc.WaitForExit(); 
                         System.IO.File.Delete(consolidatedFolder + @"\" + System.IO.Path.GetFileName(file));
                     }
                }
                catch (Exception ex)
                {
                     MessageBox.Show("Error Could not Delete file from disk " + ex.Message, "Shipment Instruction",
                         MessageBoxButtons.OK, MessageBoxIcon.Error);
                     return;
                }

           }
      }

注意:图像将被加载到这样的流程布局面板

 //Open the files to see
          private void ListBoxSourceFiles_Click(object sender, EventArgs e)
          {
               try
               {
                    if (ListBoxSourceFiles.SelectedItem != null || !ListBoxSourceFiles.SelectedItem.Equals(string.Empty))
                    {
                         //MessageBox.Show("Selected " + ListBoxSourceFiles.SelectedItem);
                         PictureBox pb = new PictureBox();
                         Image loadedImage = null;
                         loadedImage = Image.FromFile(ListBoxSourceFiles.SelectedItem.ToString());
                         pb.Height = loadedImage.Height;
                         pb.Width = loadedImage.Width;
                         pb.Image = loadedImage;
                         flowLayoutPanel1.Controls.Clear();
                         flowLayoutPanel1.Controls.Add(pb);
                    }
               }
               catch (Exception ex)
               {
                    MessageBox.Show(ex.Message, "Ship Instruction",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
               }
          }
4

4 回答 4

6

您没有具体说明您要删除的文件,但从您的问题来看,听起来您正在尝试删除您加载的图像文件。如果是这样的话,那你就有问题了。Image.FromFile的文档说:

该文件保持锁定状态,直到图像被释放。

如果您需要删除文件的能力,您需要在加载后复制图像,然后在PictureBox. 然后您可以处理加载的图像,从而解锁文件。

于 2013-07-29T13:27:25.147 回答
2

当被另一个进程锁定时,您将无法删除任何文件。

您首先必须找出哪个进程锁定了文件。
这可以通过SysInternals ProcessExplorer 实现。使用“查找句柄或 DLL”功能。

于 2013-07-29T11:26:17.277 回答
0
pb.Image.Dispose();
pb.Dispose();

完成上述步骤后,您可以再次使用图片

于 2014-05-04T05:26:12.150 回答
0

如果该文件正在使用中,则无法删除它。但是,如果您出于某种原因确实想删除它并且您无法停止锁定文件的进程(例如在卸载应用程序时),您可以安排在下次重新启动操作系统时删除文件。这些计划删除在任何进程能够锁定文件之前执行。

您必须使用MoveFileEx空的新文件名和标志来使用 Windows API MOVEFILE_DELAY_UNTIL_REBOOT。如何从 C# 执行此操作在 C# 中的 Stack Overflow 问题“MoveFile”函数(重启后删除文件)C#的答案中进行了解释。

于 2013-07-29T11:56:47.953 回答