2012-02-24 22 views
23

¿Cómo puedo obtener el nombre completo?¿Cómo encontrar el archivo por su nombre parcial?

Por ejemplo:

tengo un archivo llamado 171_s.jpg que se almacena en el disco duro.

Necesito encontrar el archivo por su nombre parcial, es decir 171_s, y obtener el nombre completo.

¿Cómo puedo implementar esto?

Respuesta

45

Aquí hay un ejemplo usando GetFiles():

static void Main(string[] args) 
{ 
    string partialName = "171_s"; 
    DirectoryInfo hdDirectoryInWhichToSearch = new DirectoryInfo(@"c:\"); 
    FileInfo[] filesInDir = hdDirectoryInWhichToSearch.GetFiles("*" + partialName + "*.*"); 

    foreach (FileInfo foundFile in filesInDir) 
    { 
     string fullName = foundFile.FullName; 
     Console.WriteLine(fullName); 
    }  
} 
+0

Esto funciona muy bien para mí, pero necesitaba convertir el FileInfo a Oprima en una matriz de cadenas y descubra que lo siguiente funcionó mejor para eso: string [] filesInDir = Directory.GetFiles (@ "c: \", "*" + partialName + "*. *"); – hvaughan3

+1

'EnumerateFiles' es el método preferido en estos días – MikeT

+0

@ hvaughan3 el FileInfo tiene un nombre y una propiedad de nombre completo que le proporcionarán eso, además de muchas otras opciones, así que estará mejor con las informaciones que con las cadenas – MikeT

7

Usted podría utilizar System.IO.Directory.GetFiles()

http://msdn.microsoft.com/en-us/library/ms143316.aspx

public static string[] GetFiles(
    string path, 
    string searchPattern, 
    SearchOption searchOption 
) 

ruta Tipo: System.String El directorio de búsqueda.

searchPattern Tipo: System.String La cadena de búsqueda para que coincida con los nombres de los archivos en camino. El parámetro no puede finalizar en dos períodos ("..") o contener dos períodos ("..") seguido de DirectorySeparatorChar o AltDirectorySeparatorChar, ni puede contener ninguno de los caracteres en InvalidPathChars.

SearchOption Tipo: System.IO.SearchOption Uno de los valores SearchOption que especifica si la operación de búsqueda debe incluir todos los subdirectorios o sólo el directorio actual .

2

Puede hacerlo de esta manera:

.... 

List<string> _filesNames; 

foreach(var file in _directory) 
{ 
    string name = GetFileName(file); 
    if(name.IndexOf(_partialFileName) > 0) 
    { 
     _fileNames.Add(name); 
    } 
} 
.... 
6

La respuesta se ha fijado ya, sin embargo, para una comprensión fácil aquí es la código

string folderPath = @"C:/Temp/"; 
DirectoryInfo dir= new DirectoryInfo(folderPath); 
FileInfo[] files = dir.GetFiles("171_s*", SearchOption.TopDirectoryOnly); 
foreach (var item in files) 
{ 
    // do something here 
} 
Cuestiones relacionadas