本人有个淘宝店,放了点东西防止店铺被关,我把一些开源的软件放上去,别人有需要就会拍,有个EXCEL的搜索工具,但是只能搜索单个文件名,今天有个客户说要根据自己的条件来搜索,他的文本文件有1万条记录,而且还是有多个子文件夹中搜索,工作量太大了,所以我帮他开发了一个小程序,可以导入文本文件,然后根据内容搜索
第一步,添加一个对话框读取文本文件
OpenFileDialog myfile = new OpenFileDialog();
int sum;
myfile.ShowDialog();
string path = myfile.FileName;
sum = AddTxtToLst(path, listBox1);
label1.Text = sum.ToString();
private int AddTxtToLst(string path, ListBox lst)
{
int sum = 0;
StreamReader file = new StreamReader(path, Encoding.Default);
string s = "";
while (s != null)
{
s = file.ReadLine();
if (!string.IsNullOrEmpty(s))
{
lst.Items.Add(s);
sum = sum + 1;
}
}
file.Close();
return sum;
}
第二步,设置源文件夹和目的文件夹
private void button2_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog()
{
RootFolder = Environment.SpecialFolder.MyComputer
};
if (fbd.ShowDialog() == DialogResult.OK)
{
label2.Text = fbd.SelectedPath;
}
}
private void button3_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog()
{
RootFolder = Environment.SpecialFolder.MyComputer
};
if (fbd.ShowDialog() == DialogResult.OK)
{
label3.Text = fbd.SelectedPath;
}
}
第三步 文件夹路径递归搜索
public static void GetAllDirList(string strBaseDir, string fileName, ListBox box2, Label lb3)
{
DirectoryInfo di = new DirectoryInfo(strBaseDir);
DirectoryInfo[] diA = di.GetDirectories();
GetFile(strBaseDir, fileName, box2, lb3);
for (int i = 0; i < diA.Length; i++)
{
string ss = diA[i].FullName;
GetFile(ss, fileName, box2, lb3);
//diA[i].FullName是某个子目录的绝对地址,把它记录在ArrayList中
GetAllDirList(diA[i].FullName,fileName,box2,lb3);
//注意:递归了。逻辑思维正常的人应该能反应过来
}
}
第四步 路径中查找文件,复制到新的文件夹
public static void GetFile(string path, string fileName,ListBox box2,Label lb3)
{
string myfile;
DirectoryInfo dir = new DirectoryInfo(path);
FileInfo[] fil = dir.GetFiles();
DirectoryInfo[] dii = dir.GetDirectories();
foreach (FileInfo f in fil)
{
string name = Path.GetFileName(f.FullName.ToString());
//Console.WriteLine(name);
if (name.Contains(fileName)) {
//Console.WriteLine(Path.GetDirectoryName(f.FullName));
box2.Items.Add(f.FullName.ToString());
myfile = lb3.Text + "\\" + name;
f.CopyTo(myfile,true);
}
}
}