2013-07-29 54 views
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; 
       } 

      } 
     } 

NB:圖像將被加載到的FlowLayout潘內爾這樣

//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; 
       } 
      } 
+0

您可以使用諸如「解鎖」的工具找出來,其過程被鎖定的文件。如果你自己打開文件,如果它們是來自組合框的圖像,你可以嘗試先將文件複製到(內存)位圖中,而不是直接從圖像中加載它。只是一個想法,因此只是一個評論。 – Akku

+0

檢查文件是否在其他程序中保持打開狀態。您可以嘗試關閉所有實例,如果在多用戶計算機上,請檢查是否有其他用戶正在訪問它。然後再試一次。 – Rex

+0

[如何做一個圖像文件,在C#中連續保存和刪除函數]可能的重複(http://stackoverflow.com/questions/17485453/how-to-do-one-image-file-save-and-delete -functions-汽車無-在-C-尖銳) –

回答

2

時,被另一進程鎖定,您將無法刪除任何文件。

您首先必須找出哪個進程鎖定了該文件。
ProcessExplorer可以使用SysInternals。使用「查找句柄或DLL」功能。

0

如果文件正在使用中,您不能刪除它。但是,如果由於某種原因真的想要刪除它,並且無法停止正在鎖定文件的進程(如卸載應用程序時),則可以在下一次重新啓動操作系統時安排該文件進行刪除。這些計劃刪除是在任何進程能夠鎖定文件之前執行的。

您必須使用MoveFileEx Windows API,使用空的新文件名和標記MOVEFILE_DELAY_UNTIL_REBOOT。如何從C#做到這一點在堆棧溢出問題「MoveFile」 function in C# (Delete file after reboot) C#的答案中解釋。

5

您不具體說明您要刪除的文件,但是從您的問題中,您聽起來像是在嘗試刪除您加載的圖像文件。如果是這樣的話,那麼你有一個問題。 documentation for Image.FromFile說:

該文件保持鎖定,直到圖像被丟棄。

如果您需要刪除文件的功能,您需要在加載後複製圖像,然後在PictureBox中使用該圖像。然後你可以處理加載的圖像,從而解鎖文件。

0
pb.Image.Dispose(); 
pb.Dispose(); 

完成以上步驟之後,土特產品可以使用畫面再次