Around and About .NET World

Il blog di Marco Minerva
posts - 1671, comments - 2232, trackbacks - 2135

My Links

News

Contattami su Live Messenger:


MCTS: Windows, Web, Distributed Applications & SQL Server

MCPD: Enterprise Applications

Tag Cloud

Archives

Post Categories

Links

Directory.GetFiles e pattern multipli

Il metodo Directory.GetFiles consente di recuperare i file con il pattern specificato all'interno di una determinata cartella. Purtroppo, esso non supporta i pattern multipli, ovvero non è possibile usare pattern come *.xls;*.doc per trovare in un colpo solo tutti i file XLS e DOC. Naturalmente si tratta di una limitazione facilmente aggirabile, ad esempio utilizzando il seguente extension method per l'oggetto DirectoryInfo:

using System;
using System.Collections.Generic;
 
namespace System.IO
{
    public static class Utils
    {
        public static FileInfo[] GetFiles2(this DirectoryInfo directory, 
                                                    string searchPattern)
        {
            return GetFiles2(directory, searchPattern,
                                             SearchOption.TopDirectoryOnly);
        }
 
        public static FileInfo[] GetFiles2(this DirectoryInfo directory,
                         string searchPattern, SearchOption searchOption)
        {
            List<FileInfo> ret = new List<FileInfo>();
 
            string[] patterns = searchPattern.Split(';');
            foreach (var pattern in patterns)
            {
                FileInfo[] files = directory.GetFiles(pattern,
                                                         searchOption);
                ret.AddRange(files);
            }
 
            return ret.ToArray();
        }
    }
}

Per utilizzarlo, basta scrivere qualcosa del tipo:

FileInfo[] files = 
    (new DirectoryInfo(@"D:\Users\Marco\Documents")).GetFiles2("*.xls;*.csv;*.doc");

Per trovare tutti i file XLS, CVS e DOC contenuti nella cartella D:\Users\Marco\Documents.

Technorati Tags: , ,

Print | posted on Monday, March 9, 2009 2:07 PM | Filed Under [ C# Orcas & .NET 3.5 ]

Feedback

Gravatar

# re: Directory.GetFiles e pattern multipli

Sì, si tratta di un problema comune, quindi penso che di soluzioni analoghe se ne trovino parecchie in giro :-D
3/10/2009 10:22 AM | Marco Minerva
Gravatar

# re: Directory.GetFiles e pattern multipli

Bella soluzione però io gli avrei fatto la così:

public static class Utils
{

public static FileInfo[] GetFiles(this DirectoryInfo directory,

params string[] searchPattern)
{

return GetFiles(directory, SearchOption.TopDirectoryOnly, searchPattern);

}



public static FileInfo[] GetFiles(this DirectoryInfo directory,

SearchOption searchOption, params string[] searchPattern)
{

List<FileInfo> ret = new List<FileInfo>();

foreach (var pattern in searchPattern)
{

FileInfo[] files = directory.GetFiles(pattern,searchOption);

ret.AddRange(files);

}



return ret.ToArray();

}

}

in modo da poterlo cercare così:



FileInfo[] files =

(new DirectoryInfo(@"D:\Users\Marco\Documents")).GetFiles("*.xls","*.csv","*.doc");

3/10/2009 10:56 AM | Giuseppe Lippolis
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET