Como: consulta o conteúdo dos arquivos em uma pasta (LINQ)
Este exemplo mostra como consultar sobre todos os arquivos em uma árvore de diretório especificado, abra cada arquivo e inspecionar o seu conteúdo.Esse tipo de técnica poderia ser usado para criar índices ou reverter os índices do conteúdo de uma árvore de diretórios.Este exemplo é executada uma pesquisa de cadeia de caracteres simples.No entanto, os tipos mais complexos de correspondência de padrões podem ser executados com uma expressão regular.Para obter mais informações, consulte Como: combinar consultas LINQ com expressões regulares.
Exemplo
Module Module1
'QueryContents
Public Sub Main()
' Modify this path as necessary.
Dim startFolder = "c:\program files\Microsoft Visual Studio 9.0\VB\"
'Take a snapshot of the folder contents
Dim dir As New System.IO.DirectoryInfo(startFolder)
Dim fileList = dir.GetFiles("*.*", System.IO.SearchOption.AllDirectories)
Dim searchTerm = "Visual Studio"
' Search the contents of each file.
' A regular expression created with the RegEx class
' could be used instead of the Contains method.
Dim queryMatchingFiles = From file In fileList _
Where file.Extension = ".htm" _
Let fileText = GetFileText(file.FullName) _
Where fileText.Contains(searchTerm) _
Select file.FullName
Console.WriteLine("The term " & searchTerm & " was found in:")
' Execute the query.
For Each filename In queryMatchingFiles
Console.WriteLine(filename)
Next
' Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit")
Console.ReadKey()
End Sub
' Read the contents of the file. This is done in a separate
' function in order to handle potential file system errors.
Function GetFileText(ByVal name As String) As String
' If the file has been deleted, the right thing
' to do in this case is return an empty string.
Dim fileContents = String.Empty
' If the file has been deleted since we took
' the snapshot, ignore it and return the empty string.
If System.IO.File.Exists(name) Then
fileContents = System.IO.File.ReadAllText(name)
End If
Return fileContents
End Function
End Module
class QueryContents
{
public static void Main()
{
// Modify this path as necessary.
string startFolder = @"c:\program files\Microsoft Visual Studio 9.0\";
// Take a snapshot of the file system.
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(startFolder);
// This method assumes that the application has discovery permissions
// for all folders under the specified path.
IEnumerable<System.IO.FileInfo> fileList = dir.GetFiles("*.*", System.IO.SearchOption.AllDirectories);
string searchTerm = @"Visual Studio";
// Search the contents of each file.
// A regular expression created with the RegEx class
// could be used instead of the Contains method.
// queryMatchingFiles is an IEnumerable<string>.
var queryMatchingFiles =
from file in fileList
where file.Extension == ".htm"
let fileText = GetFileText(file.FullName)
where fileText.Contains(searchTerm)
select file.FullName;
// Execute the query.
Console.WriteLine("The term \"{0}\" was found in:", searchTerm);
foreach (string filename in queryMatchingFiles)
{
Console.WriteLine(filename);
}
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}
// Read the contents of the file.
static string GetFileText(string name)
{
string fileContents = String.Empty;
// If the file has been deleted since we took
// the snapshot, ignore it and return the empty string.
if (System.IO.File.Exists(name))
{
fileContents = System.IO.File.ReadAllText(name);
}
return fileContents;
}
}
Compilando o código
Criar um Visual Studio o projeto que se destina a .NET Framework versão 3.5.Por padrão, o projeto tem uma referência a System.Core.dll e um using diretiva (C#) ou Imported namespace (Visual Basic) para o namespace System. LINQ.No C# projetos, adicione um using diretriz para o namespace System. IO.
Copie este código para seu projeto.
Pressione F5 para compilar e executar o programa.
Pressione qualquer tecla para sair da janela do console.
Programação robusta
Para operações de consulta intensivo sobre o conteúdo de vários tipos de documentos e arquivos, considere o uso de O Windows Desktop Search engine.