C# 在文件中搜索文本时,如何重复搜索而不重新检索文件?
我在搜索时使用两种方法。首先检索文件,然后在文件中搜索 但在某些情况下,我只更改搜索文本,我想在相同的目录和文件中重复搜索。那么我怎样才能让它记住最后检索到的文件呢 这是启动backgorundworker和搜索方法的按钮单击事件:C# 在文件中搜索文本时,如何重复搜索而不重新检索文件?,c#,.net,winforms,C#,.net,Winforms,我在搜索时使用两种方法。首先检索文件,然后在文件中搜索 但在某些情况下,我只更改搜索文本,我想在相同的目录和文件中重复搜索。那么我怎样才能让它记住最后检索到的文件呢 这是启动backgorundworker和搜索方法的按钮单击事件: private void startButton_Click(object sender, EventArgs e) { ListViewCostumControl.lvnf.Items.Clear();
private void startButton_Click(object sender, EventArgs e)
{
ListViewCostumControl.lvnf.Items.Clear();
numberoffiles = 0;
numberofrestrictedFiles = 0;
numberofdirs = 0;
label24.Text = "0";
label1.Text = "0";
label15.Text = "0";
Logger.Write("Operation started");
label21.Text = "Phase 1: Retrieving files";
label21.Visible = true;
startButton.Enabled = false;
stopButton.Enabled = true;
pauseresumeButton.Enabled = true;
label1.Select();
timer1.Start();
if (!backgroundWorker1.IsBusy)
{
SetWorkerMode(true);
backgroundWorker1.RunWorkerAsync();
}
}
int numberofdirs = 0;
void DirSearch(string rootDirectory, string filesExtension, string[] textToSearch, BackgroundWorker worker, DoWorkEventArgs e)
{
List<string> resultsoftextfound = new List<string>();
List<string> resultsoftextfound1 = new List<string>();
List<string> filePathList = new List<string>();
int numberoffiles = 0;
try
{
filePathList = SearchAccessibleFilesNoDistinct(rootDirectory, null,worker,e).ToList();
}
catch (Exception err)
{
string ad = err.ToString();
}
label21.Invoke((MethodInvoker)delegate
{
label21.Text = "Phase 2: Searching in files";
});
MyProgress myp = new MyProgress();
myp.Report4 = filePathList.Count.ToString();
foreach (string file in filePathList)
{
try
{
_busy.WaitOne();
if (worker.CancellationPending == true)
{
e.Cancel = true;
return;
}
bool reportedFile = false;
for (int i = 0; i < textToSearch.Length; i++)
{
if (File.ReadAllText(file).IndexOf(textToSearch[i], StringComparison.InvariantCultureIgnoreCase) >= 0)
{
resultsoftextfound.Add(file + " " + textToSearch[i]);
if (!reportedFile)
{
numberoffiles++;
myp.Report1 = file;
myp.Report2 = numberoffiles.ToString();
myp.Report3 = textToSearch[i];
backgroundWorker1.ReportProgress(0, myp);
reportedFile = true;
}
}
}
numberofdirs++;
label1.Invoke((MethodInvoker)delegate
{
label1.Text = string.Format("{0}/{1}", numberofdirs, myp.Report4);
label1.Visible = true;
});
}
catch (Exception)
{
}
}
}
这是backgroundworker事件中已完成的我正在向文本文件写入一些信息,但不是全部检索到的文件
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
_stopwatch.Restart();
string[] values = textBox1.Text.Split(new string[] { ",," }, StringSplitOptions.None);
DirSearch(textBox3.Text, textBox2.Text, values, worker, e);
_stopwatch.Stop();
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
MyProgress mypro = (MyProgress)e.UserState;
ListViewCostumControl.lvnf.Items.Add(mypro.Report1);
label15.Text = mypro.Report2;
label15.Visible = true;
if (ListViewCostumControl.lvnf.Items.Count > 9)
textBox4.Enabled = true;
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled == true)
{
label1.Select();
_stopwatch.Stop();
label24.Text = "0";
label5.Text = "00:00:00";
label1.Text = "0";
label11.Text = "0";
label15.Text = "0";
label24.Text = "0";
pauseresumeButton.Enabled = false;
stopButton.Enabled = false;
startButton.Enabled = true;
timer1.Stop();
ListViewCostumControl.lvnf.Items.Clear();
Logger.Write("Operation cancelled");
button4.Enabled = true;
}
if (e.Error != null)
{
}
else
{
label1.Select();
_stopwatch.Stop();
timer1.Stop();
stopButton.Enabled = false;
pauseresumeButton.Enabled = false;
startButton.Enabled = true;
label21.Text = "Last operation ended at: " + DateTime.Now;
Logger.Write("Number of retrieved files: " + numberoffiles);
Logger.Write("Number of restricted files: " + numberofrestrictedFiles);
Logger.Write("Number of searched files: " + numberofdirs);
Logger.Write("Number of results: " + label15.Text);
Logger.Write("Searched root directory: " + textBox3.Text);
Logger.Write("Operation time: " + _stopwatch.Elapsed);
Logger.Write("Operation ended");
Logger.Write(" ");
button4.Enabled = true;
mCompleted = true;
if (mClosePending) this.Close();
}
}
以下是搜索方法:
private void startButton_Click(object sender, EventArgs e)
{
ListViewCostumControl.lvnf.Items.Clear();
numberoffiles = 0;
numberofrestrictedFiles = 0;
numberofdirs = 0;
label24.Text = "0";
label1.Text = "0";
label15.Text = "0";
Logger.Write("Operation started");
label21.Text = "Phase 1: Retrieving files";
label21.Visible = true;
startButton.Enabled = false;
stopButton.Enabled = true;
pauseresumeButton.Enabled = true;
label1.Select();
timer1.Start();
if (!backgroundWorker1.IsBusy)
{
SetWorkerMode(true);
backgroundWorker1.RunWorkerAsync();
}
}
int numberofdirs = 0;
void DirSearch(string rootDirectory, string filesExtension, string[] textToSearch, BackgroundWorker worker, DoWorkEventArgs e)
{
List<string> resultsoftextfound = new List<string>();
List<string> resultsoftextfound1 = new List<string>();
List<string> filePathList = new List<string>();
int numberoffiles = 0;
try
{
filePathList = SearchAccessibleFilesNoDistinct(rootDirectory, null,worker,e).ToList();
}
catch (Exception err)
{
string ad = err.ToString();
}
label21.Invoke((MethodInvoker)delegate
{
label21.Text = "Phase 2: Searching in files";
});
MyProgress myp = new MyProgress();
myp.Report4 = filePathList.Count.ToString();
foreach (string file in filePathList)
{
try
{
_busy.WaitOne();
if (worker.CancellationPending == true)
{
e.Cancel = true;
return;
}
bool reportedFile = false;
for (int i = 0; i < textToSearch.Length; i++)
{
if (File.ReadAllText(file).IndexOf(textToSearch[i], StringComparison.InvariantCultureIgnoreCase) >= 0)
{
resultsoftextfound.Add(file + " " + textToSearch[i]);
if (!reportedFile)
{
numberoffiles++;
myp.Report1 = file;
myp.Report2 = numberoffiles.ToString();
myp.Report3 = textToSearch[i];
backgroundWorker1.ReportProgress(0, myp);
reportedFile = true;
}
}
}
numberofdirs++;
label1.Invoke((MethodInvoker)delegate
{
label1.Text = string.Format("{0}/{1}", numberofdirs, myp.Report4);
label1.Visible = true;
});
}
catch (Exception)
{
}
}
}
如果用户在文本框1中输入
以后将文本作为另一个搜索文本。
void lvnf_SelectedIndexChanged(object sender, EventArgs e)
{
if (ListViewCostumControl.lvnf.SelectedItems.Count > 0)
{
results = new List<int>();
richTextBox1.Text = File.ReadAllText(ListViewCostumControl.lvnf.Items[ListViewCostumControl.lvnf.SelectedIndices[0]].Text);
FileInfo fi = new FileInfo(ListViewCostumControl.lvnf.Items[ListViewCostumControl.lvnf.SelectedIndices[0]].Text);
label17.Text = ExtensionMethods.ToFileSize(fi.Length);
label17.Visible = true;
filePath = Path.GetDirectoryName(fi.FullName);
string word = textBox1.Text;
string[] test = word.Split(new string[] { ",," }, StringSplitOptions.None);
foreach (string myword in test)
{
HighlightPhrase(richTextBox1, myword, Color.Yellow);
label16.Text = results.Count.ToString();
label16.Visible = true;
if (results.Count > 0)
{
numericUpDown1.Maximum = results.Count;
numericUpDown1.Enabled = true;
richTextBox1.SelectionStart = results[(int)numericUpDown1.Value - 1];
richTextBox1.ScrollToCaret();
}
}
}
}
void lvnf\u SelectedIndexChanged(对象发送方,事件参数e)
{
如果(ListViewCostumControl.lvnf.SelectedItems.Count>0)
{
结果=新列表();
richTextBox1.Text=File.ReadAllText(ListViewCostumControl.lvnf.Items[ListViewCostumControl.lvnf.SelectedDices[0].Text);
FileInfo fi=新文件信息(ListViewCostumControl.lvnf.Items[ListViewCostumControl.lvnf.SelectedIndices[0]].Text);
label17.Text=ExtensionMethods.ToFileSize(fi.Length);
标签17.可见=真实;
filePath=Path.GetDirectoryName(fi.FullName);
字符串字=textBox1.Text;
string[]test=word.Split(新字符串[]{“,”},StringSplitOptions.None);
foreach(测试中的字符串myword)
{
HighlightPhrase(richTextBox1,myword,Color.Yellow);
label16.Text=results.Count.ToString();
label16.可见=真;
如果(results.Count>0)
{
numericUpDown1.Maximum=results.Count;
numericUpDown1.Enabled=true;
richTextBox1.SelectionStart=结果[(int)numericUpDown1.Value-1];
richTextBox1.ScrollToCaret();
}
}
}
}
例如,如果我键入以搜索表格1,则为表格1
然后它将搜索Form1和Form1的所有结果
或者,如果我键入Form1,则输入“帮助”
然后,结果也将用于Form1和帮助
这个问题不确定一个问题是否更符合逻辑。当我只输入Frime1时,我是否应该将它视为形式1,还是应该将它保留为现在的形式1,形式1?
在我搜索切换摄像机之前,它找到了结果,但在此之前,我搜索切换摄像机,它没有找到任何结果,我没有在切换摄像机之间放置
所以我认为通过逻辑切换摄像机也应该找到切换摄像机
那么,如果没有,,但是单词之间有空格,那么如何更改此搜索规则来搜索一个单词呢
切换摄影机也会找到切换摄影机,但切换、、摄影机可能会找到更多结果。虽然通常在此处显示代码是一件好事,你应该试着把这个问题简化成一个更简洁的版本。请发布一个或,突出你遇到的问题,这样我们可以提供更好的帮助,而通常在这里显示代码是一件好事,你应该试着把这个问题简化成一个更简洁的版本。请发表一篇文章,突出你遇到的问题,这样我们可以更好地提供帮助