-1

アプリケーションの特定の別のプロセスで使用された 1 つのファイルを削除しようとしています。そのため、ファイルが特定の別のプロセスによって使用されているというエラーが発生します。

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{

    DirectoryInfo NewDir = new DirectoryInfo(imagefolderpath1);
    FileInfo[] files = NewDir.GetFiles("*.jpg");
    foreach (var item in files)
    {
        string strFile = imagefolderpath1 + "\\" + item.ToString();
        if (File.Exists(strFile))
        {

            File.Delete(strFile);
        }
    }

}

この問題を解決するにはどうすればよいですか?

4

4 に答える 4

0

別のプロセスで使用されているファイルにはアクセスできません。ただし、後でこれを行うことがアプリにとって重要でない場合は、System.AppDomain.ProcessExit イベント ハンドラーでこれを行うことができます。集中管理されたリストにファイルを追加し、次のようにクリーンアップ ルーチンを登録するだけです。

AppDomain.CurrentDomain.ProcessExit += new EventHandler(deleteFilesIfPossibleNow);

ファイルがまだ別のプロセスからアクセスされている場合は、ハンドラーで例外を処理する必要があります。

于 2013-08-05T12:13:07.123 に答える
0

_FormClosed を使用する代わりに、次のように他のコードからフォームを起動してみてください。

DirectoryInfo NewDir;
FileInfo[] files;

using (var form = new Form1())
{
    var result = form.ShowDialog();
    if (result == DialogResult.Close)
    {
        NewDir = new DirectoryInfo(imagefolderpath1);
        files = NewDir.GetFiles("*.jpg");
    }
}

foreach(var item in files) { 
    string strFile = imagefolderpath1 + "\\" + item.toString();
    File.Delete(strFile);
}

私はあなたのプログラムがどのように機能するのか100%確信していませんでしたが、フォームを閉じる前にフォームから情報を取得し、この種の方法で使用していたファイルを閉じることができます

于 2013-08-05T12:14:25.543 に答える