private void DirSearch(string root, string filesExtension,string textToSearch, BackgroundWorker worker, DoWorkEventArgs e)
{
string[] filePaths = null;
int numberoffiles = 0;
int numberofdirs = 0;
try
{
filePaths = Directory.GetFiles(root, filesExtension, SearchOption.AllDirectories);
}
catch(Exception err)
{
string ad = err.ToString();
}
if (filePaths != null && filePaths.Length > 0)
{
for (int i = 0; i < filePaths.Length; i++)
{
_busy.WaitOne();
if (worker.CancellationPending == true)
{
e.Cancel = true;
return;
}
List<MyProgress> prog = new List<MyProgress>();
int var = File.ReadAllText(filePaths[i]).Contains(textToSearch) ? 1 : 0;
if (var == 1)
{
string filename = filePaths[i];//filePaths[i].Split('\\').Last();
numberoffiles++;
prog.Add(new MyProgress { Report1 = filename, Report2 = numberoffiles.ToString() });
backgroundWorker1.ReportProgress(0, prog);
Thread.Sleep(100);
}
numberofdirs++;
label1.Invoke((MethodInvoker)delegate
{
label1.Text = numberofdirs.ToString();
label1.Visible = true;
});
Thread.Sleep(100);
}
}
}
私はtryとtryを使用していますが、ディレクトリのひとつがプログラム停止を拒否してしまったということです。そして私はそれを次のディレクトリに続けてほしい。ファイルの取得時にアクセスが拒否されたかどうかを確認するにはどうすればよいですか?
たとえば、私はファイルが10個のディレクトリに450個あり、2番目のディレクトリにアクセスが拒否されてから次のディレクトリに移動するというように続きます。
Sleep()とは何ですか? BackgroundWorkerを使用する場合は、Invoke()の代わりにReportProgress()を使用するのが一般的です。 – MickyD