using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Tools;
using System.Threading;
namespace AutoSerachFile
{
class AutoSerachFile
{
static void Main(string[] args)
{
if (args.Length < 3)
{
Console.WriteLine("參數錯誤!!!");
}
else
{
//string dir = @"D:\bb";
//string suffix = "*.txt";
//string keyword = "Dir";
string dir = args[0];
string suffix = args[1];
string keyword = args[2];
string[] filepath = FindALLFile.getAllFile(dir, suffix);
for (int i = 0; i < filepath.Length; i++)
{
string[] inputInfo = new string[2];
inputInfo[0] = filepath[i];
inputInfo[1] = keyword;
new Thread(new ParameterizedThreadStart(serach)).Start(inputInfo);
}
}
Console.Read();
}
public static void serach(Object inputInfo)
{
string[] serachInfo = (String[])inputInfo;
List<SearchInfo> getall = SearchFile.search(serachInfo[0], serachInfo[1]);
for (int i = 0; i < getall.Count; i++)
{
Console.WriteLine("文件名:" + getall[i].filepath +
"\r\n行:" + getall[i].line + "\t列:" + getall[i].index + "\r\n" + "內容:\r\n" + getall[i].contentText + "\r\n");
}
}
}
}
2
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Tools
{
public struct SearchInfo
{
public int line;
public int index;
public string filepath;
public string contentText;
}
public class SearchFile
{
//public static List<SearchInfo> search(String filePath, string keyWord)
//{
// StreamReader StrRead = File.OpenText(filePath);
// List<SearchInfo> allInfo = new List<SearchInfo>() { };
// int[] index_array = new int[2];
// int count = 0;
// while (!StrRead.EndOfStream)
// {
// SearchInfo searchInfo=new SearchInfo();
// string contentText=StrRead.ReadLine();
// int index = getKeyWordIndex(contentText, keyWord);
// if (index != -1)
// {
// searchInfo.line = count;
// searchInfo.index = index;
// searchInfo.filepath = filePath;
// searchInfo.contentText = contentText;
// allInfo.Add(searchInfo);
// }
// count++;
// }
// StrRead.Close();
// return allInfo;
//}
public static List<SearchInfo> search(String filePath, string keyWord)
{
string[] StrRead = File.ReadAllLines(filePath,Encoding.GetEncoding("gb2312"));
List<SearchInfo> allInfo = new List<SearchInfo>() { };
for (int i = 0; i < StrRead.Length; i++)
{
SearchInfo searchInfo = new SearchInfo();
int index = getKeyWordIndex(StrRead[i], keyWord);
if (index != -1)
{
searchInfo.line = i;
searchInfo.index = index;
searchInfo.filepath = filePath;
searchInfo.contentText = StrRead[i];
allInfo.Add(searchInfo);
}
}
return allInfo;
}
private static int getKeyWordIndex(string str, string keyWord)
{
int keyWordIndex=-1;
try
{
keyWordIndex = str.IndexOf(keyWord);
}
catch (ArgumentNullException e)
{
keyWordIndex = -1;
}
return keyWordIndex;
}
}
public class FindALLFile
{
public static string[] getAllFile(string dir, string suffix)
{
return Directory.GetFiles(dir, suffix, SearchOption.AllDirectories);
}
}
}