Directory.GetFiles (LocalFilePath, searchPattern);Filtrar nombres de archivo: obtener * .abc sin * .abcd, o * .abcde, etc.
Notas de MSDN:
Cuando se utiliza el carácter comodín asterisco en un searchPattern, tales como ".txt", el comportamiento coincidente cuando la extensión es exactamente tres caracteres de longitud es diferente que cuando la extensión es más o menos de tres caracteres de largo. Un SearchPattern con una extensión de archivo de exactamente tres caracteres devuelve archivos que tienen una extensión de tres o más caracteres, donde los primeros tres caracteres coinciden con la extensión de archivo especificada en el searchPattern. Un searchPattern con una extensión de archivo de uno, dos o más de tres caracteres devuelve solo archivos que tienen extensiones de exactamente esa longitud que coinciden con la extensión de archivo especificada en el searchPattern. Al usar el carácter comodín de signo de interrogación, este método devuelve solo los archivos que coinciden con la extensión de archivo especificada. Por ejemplo, dados dos archivos, "archivo1.txt" y "archivo1.txt otro", en un directorio, un patrón de búsqueda de "archivo? .txt" devuelve solo el primer archivo, mientras que un patrón de búsqueda de "archivo .txt" devuelve ambos archivos.
La siguiente lista muestra el comportamiento de diferentes longitudes para el parámetro searchPattern:
*.abc
devuelve archivos que tienen una extensión de.abc
,.abcd
,.abcde
,.abcdef
, y así sucesivamente.*.abcd
devuelve solo archivos con una extensión de.abcd
.*.abcde
devuelve solo los archivos que tienen una extensión de.abcde
.*.abcdef
devuelve solo archivos con una extensión de.abcdef
.
Con el parámetro establecido en searchPattern
*.abc
, ¿Cómo puedo devolver los archivos que tienen una extensión de .abc
, no .abcd
, .abcde
y así sucesivamente?
Tal vez esta función funcionará:
private bool StriktMatch(string fileExtension, string searchPattern)
{
bool isStriktMatch = false;
string extension = searchPattern.Substring(searchPattern.LastIndexOf('.'));
if (String.IsNullOrEmpty(extension))
{
isStriktMatch = true;
}
else if (extension.IndexOfAny(new char[] { '*', '?' }) != -1)
{
isStriktMatch = true;
}
else if (String.Compare(fileExtension, extension, true) == 0)
{
isStriktMatch = true;
}
else
{
isStriktMatch = false;
}
return isStriktMatch;
}
Programa de prueba:
class Program
{
static void Main(string[] args)
{
string[] fileNames = Directory.GetFiles("C:\\document", "*.abc");
ArrayList al = new ArrayList();
for (int i = 0; i < fileNames.Length; i++)
{
FileInfo file = new FileInfo(fileNames[i]);
if (StriktMatch(file.Extension, "*.abc"))
{
al.Add(fileNames[i]);
}
}
fileNames = (String[])al.ToArray(typeof(String));
foreach (string s in fileNames)
{
Console.WriteLine(s);
}
Console.Read();
}
Cualquier otra persona mejor solución?
Tendrás que dar más contexto que eso ... – Eclipse