VB.NET
Private Sub btn1_Click(ByVal sender As Object, _
ByVal e As EventArgs) Handles btn1.Click
Dim files As String() = _
Grep("C:\grep1", "検索したい文字列", "*.txt", False)
Dim f As String
For Each f In files
Console.WriteLine(f)
Next f
End Sub
Public Shared Function Grep(ByVal dirPath As String, _
ByVal pattern As String, ByVal fileWildcards As String, _
ByVal ignoreCase As Boolean) As String()
Dim fileCol As New System.Collections.ArrayList()
Dim opts As System.Text.RegularExpressions.RegexOptions = _
System.Text.RegularExpressions.RegexOptions.None
If ignoreCase Then
opts = opts Or System.Text.RegularExpressions.RegexOptions.IgnoreCase
End If
Dim reg As New System.Text.RegularExpressions.Regex(pattern, opts)
Dim dir As New System.IO.DirectoryInfo(dirPath)
Dim files As System.IO.FileInfo() = dir.GetFiles(fileWildcards)
Dim f As System.IO.FileInfo
For Each f In files
If ContainTextInFile(f.FullName, reg) Then
fileCol.Add(f.FullName)
End If
Next f
Return CType(fileCol.ToArray(GetType(String)), String())
End Function
Private Shared Function ContainTextInFile(ByVal filePath As String, _
ByVal reg As System.Text.RegularExpressions.Regex) As Boolean
Dim strm As System.IO.StreamReader = Nothing
Dim txt As String = ""
Try
strm = New System.IO.StreamReader( _
filePath, System.Text.Encoding.Default, True)
txt = strm.ReadToEnd()
Finally
strm.Close()
End Try
Return reg.IsMatch(txt)
End Function
C#private void btn1_Click(object sender, EventArgs e)
{
string[] files = Grep("C:\\docs1", "検索したい文字列", "*.txt", false);
foreach (string f in files)
{
Console.WriteLine(f);
}
}
public static string[] Grep(
string dirPath, string pattern, string fileWildcards, bool ignoreCase)
{
System.Collections.ArrayList fileCol =
new System.Collections.ArrayList();
System.Text.RegularExpressions.RegexOptions opts =
System.Text.RegularExpressions.RegexOptions.None;
if (ignoreCase)
opts |= System.Text.RegularExpressions.RegexOptions.IgnoreCase;
System.Text.RegularExpressions.Regex reg =
new System.Text.RegularExpressions.Regex(pattern, opts);
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(dirPath);
System.IO.FileInfo[] files = dir.GetFiles(fileWildcards);
foreach (System.IO.FileInfo f in files)
{
if (ContainTextInFile(f.FullName, reg))
fileCol.Add(f.FullName);
}
return (string[])fileCol.ToArray(typeof(string));
}
private static bool ContainTextInFile(
string filePath, System.Text.RegularExpressions.Regex reg)
{
System.IO.StreamReader strm = null;
string txt = "";
try
{
strm = new System.IO.StreamReader(
filePath, System.Text.Encoding.Default, true);
txt = strm.ReadToEnd();
}
finally
{
strm.Close();
}
return reg.IsMatch(txt);
}