更好的搜索所有文件中的字符串使用C# [英] Better Search for a string in all files using C#
本文介绍了更好的搜索所有文件中的字符串使用C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
QUESTIONS
- 对于这个(使用C#)?
- 是否有任何情况下会失败此代码?
<注意:我测试了很小的文件。
$ b
CODE
static void Main()
{
string sourceFolder = @C:\Test;
字符串searchWord =.class1;
列表< string> allFiles = new List< string>();
AddFileNamesToList(sourceFolder,allFiles);
foreach(所有文件中的字符串文件名)
{
字符串内容= File.ReadAllText(fileName);
if(contents.Contains(searchWord))
{
Console.WriteLine(fileName);
}
}
Console.WriteLine();
System.Console.ReadKey();
$ b $ public static void AddFileNamesToList(string sourceDir,List< string> allFiles)
{
string [] fileEntries = Directory.GetFiles(sourceDir );
foreach(fileEntries中的字符串fileName)
{
allFiles.Add(fileName);
//递归
string [] subdirectoryEntries = Directory.GetDirectories(sourceDir);
foreach(subdirectoryEntries中的字符串项)
{
//避免重新分析点
if((File.GetAttributes(item)& FileAttributes.ReparsePoint)!= FileAttributes。 ReparsePoint)
{
AddFileNamesToList(item,allFiles);
$ b 参考
-
stackoverflow.com/questions/13992508/splitting-a-string-with-two-criteria\">以两个条件分割字符串
- C#检测路径中的文件夹路口
-
- FolderBrowserDialog带重新分析点的SelectedPath ts
- C# - 高质量字节数组图像转换
解决方案 File.ReadAllText()更好的使用
File.ReadLines(@C:\file.txt);
它返回 IEnumerable
如果在到达文本文件的最后一行之前找到字符串,则不必读取整个文件。
After referring many blogs and articles, I have reached at the following code for searching for a string in all files inside a folder. It is working fine in my tests.
QUESTIONS
- Is there a faster approach for this (using C#)?
- Is there any scenario that will fail with this code?
Note: I tested with very small files. Also very few number of files.
CODE
static void Main()
{
string sourceFolder = @"C:\Test";
string searchWord = ".class1";
List<string> allFiles = new List<string>();
AddFileNamesToList(sourceFolder, allFiles);
foreach (string fileName in allFiles)
{
string contents = File.ReadAllText(fileName);
if (contents.Contains(searchWord))
{
Console.WriteLine(fileName);
}
}
Console.WriteLine(" ");
System.Console.ReadKey();
}
public static void AddFileNamesToList(string sourceDir, List<string> allFiles)
{
string[] fileEntries = Directory.GetFiles(sourceDir);
foreach (string fileName in fileEntries)
{
allFiles.Add(fileName);
}
//Recursion
string[] subdirectoryEntries = Directory.GetDirectories(sourceDir);
foreach (string item in subdirectoryEntries)
{
// Avoid "reparse points"
if ((File.GetAttributes(item) & FileAttributes.ReparsePoint) != FileAttributes.ReparsePoint)
{
AddFileNamesToList(item, allFiles);
}
}
}
REFERENCE
- Using StreamReader to check if a file contains a string
- Splitting a String with two criteria
- C# detect folder junctions in a path
- Detect Symbolic Links, Junction Points, Mount Points and Hard Links
- FolderBrowserDialog SelectedPath with reparse points
- C# - High Quality Byte Array Conversion of Images
解决方案 Instead of File.ReadAllText() better use
File.ReadLines(@"C:\file.txt");
It returns IEnumerable
(yielded) so you will not have to read the whole file if your string is found before the last line of the text file is reached
这篇关于更好的搜索所有文件中的字符串使用C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文