После ссылки на многие блоги и статьи я пришел к следующему коду для поиска строки во всех файлах внутри папки. Он отлично работает в моих тестах.
ВОПРОСЫ
- Есть ли более быстрый подход для этого (используя С#)?
- Есть ли какой-либо сценарий, который завершится с этим кодом?
Примечание. Я тестировал очень маленькие файлы. Также очень мало файлов.
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);
}
}
}
ССЫЛКА
- Использование StreamReader для проверки того, содержит ли файл строку
- Разделение строки с двумя критериями
- С# обнаруживает переходы в папке
- Обнаружение символических ссылок, точек соединения, точек монтирования и жестких ссылок
- FolderBrowserDialog SelectedPath с точками повторной обработки
- С# - преобразование изображений с высоким качеством байт файла