2

ファイルを1つずつ削除すると、「ファイルを削除しようとしたときに別のプロセスによって使用されているため、プロセスはファイルにアクセスできません」というエラーが生成されます

コード:このようなファイルを削除するための提案はありますか?

      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

ファイルが使用中の場合は削除できません。ただし、何らかの理由で本当にファイルを削除したいのに、ファイルをロックしているプロセスを停止できない場合 (アプリケーションのアンインストール時など) は、次にオペレーティング システムを再起動したときにファイルを削除するようにスケジュールできます。これらのスケジュールされた削除は、プロセスがファイルをロックできるようになる前に実行されます。

MoveFileExnull の新しいファイル名とフラグを使用して、Windows API を使用する必要がありますMOVEFILE_DELAY_UNTIL_REBOOT。C# からそれを行う方法は、スタック オーバーフローの質問への回答で説明されています

于 2013-07-29T11:56:47.953 に答える
0
pb.Image.Dispose();
pb.Dispose();

上記の手順の後、to は再び画像を使用できるようになります

于 2014-05-04T05:26:12.150 に答える