Comment puis-je obtenir le nombre de fichiers d’un dossier utilisant ASP.NET avec C #?
System.IO.Directory myDir = GetMyDirectoryForTheExample(); int count = myDir.GetFiles().Length;
Vous pouvez utiliser la méthode Directory.GetFiles
Voir aussi Méthode Directory.GetFiles (Ssortingng, Ssortingng, SearchOption)
Vous pouvez spécifier l’option de recherche dans cette surcharge.
TopDirectoryOnly : Inclut uniquement le répertoire actuel dans une recherche.
AllDirectories : inclut le répertoire en cours et tous les sous-répertoires dans une opération de recherche. Cette option inclut des points d’parsing comme les lecteurs montés et les liens symboliques dans la recherche.
// searches the current directory and sub directory int fCount = Directory.GetFiles(path, "*", SearchOption.AllDirectories).Length; // searches the current directory int fCount = Directory.GetFiles(path, "*", SearchOption.TopDirectoryOnly).Length;
La méthode la plus élégante serait d’utiliser LINQ :
var fileCount = (from file in Directory.EnumerateFiles(@"H:\iPod_Control\Music", "*.mp3", SearchOption.AllDirectories) select file).Count();
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo("SourcePath"); int count = dir.GetFiles().Length;
Vous pouvez utiliser ceci.
Lire des fichiers PDF depuis un répertoire:
var list = Directory.GetFiles(@"C:\ScanPDF", "*.pdf"); if (list.Length > 0) { }
Essayez de suivre le code pour obtenir le nombre de fichiers dans le dossier
ssortingng strDocPath = Server.MapPath('Enter your path here'); int docCount = Directory.GetFiles(strDocPath, "*", SearchOption.TopDirectoryOnly).Length;
Les méthodes .NET Directory.GetFiles (dir) ou DirectoryInfo.GetFiles () ne sont pas très rapides pour obtenir un nombre total de fichiers. Si vous utilisez très fortement cette méthode de comptage de fichiers, envisagez d’ utiliser directement WinAPI , ce qui économise environ 50% de temps.
Voici l’approche WinAPI où j’encapsule les appels WinAPI à une méthode C #:
int GetFileCount(ssortingng dir, bool includeSubdirectories = false)
Code complet:
[Serializable, StructLayout(LayoutKind.Sequential)] private struct WIN32_FIND_DATA { public int dwFileAtsortingbutes; public int ftCreationTime_dwLowDateTime; public int ftCreationTime_dwHighDateTime; public int ftLastAccessTime_dwLowDateTime; public int ftLastAccessTime_dwHighDateTime; public int ftLastWriteTime_dwLowDateTime; public int ftLastWriteTime_dwHighDateTime; public int nFileSizeHigh; public int nFileSizeLow; public int dwReserved0; public int dwReserved1; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public ssortingng cFileName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)] public ssortingng cAlternateFileName; } [DllImport("kernel32.dll")] private static extern IntPtr FindFirstFile(ssortingng pFileName, ref WIN32_FIND_DATA pFindFileData); [DllImport("kernel32.dll")] private static extern bool FindNextFile(IntPtr hFindFile, ref WIN32_FIND_DATA lpFindFileData); [DllImport("kernel32.dll")] private static extern bool FindClose(IntPtr hFindFile); private static readonly IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1); private const int FILE_ATTRIBUTE_DIRECTORY = 16; private int GetFileCount(ssortingng dir, bool includeSubdirectories = false) { ssortingng searchPattern = Path.Combine(dir, "*"); var findFileData = new WIN32_FIND_DATA(); IntPtr hFindFile = FindFirstFile(searchPattern, ref findFileData); if (hFindFile == INVALID_HANDLE_VALUE) throw new Exception("Directory not found: " + dir); int fileCount = 0; do { if (findFileData.dwFileAtsortingbutes != FILE_ATTRIBUTE_DIRECTORY) { fileCount++; continue; } if (includeSubdirectories && findFileData.cFileName != "." && findFileData.cFileName != "..") { ssortingng subDir = Path.Combine(dir, findFileData.cFileName); fileCount += GetFileCount(subDir, true); } } while (FindNextFile(hFindFile, ref findFileData)); FindClose(hFindFile); return fileCount; }
Lorsque je recherche dans un dossier contenant 13 000 fichiers sur mon ordinateur – Moyenne: 110 ms
int fileCount = GetFileCount(searchDir, true); // using WinAPI
Méthode intégrée .NET: Directory.GetFiles (dir) – Moyenne: 230ms
int fileCount = Directory.GetFiles(searchDir, "*", SearchOption.AllDirectories).Length;
Remarque: la première exécution de l’une ou l’autre des méthodes sera respectivement inférieure de 60% à 100%, car le disque dur prend un peu plus de temps pour localiser les secteurs. Je suppose que les appels suivants seront semi-mis en cache par Windows.
Pour obtenir le nombre de certaines extensions de type à l’aide de LINQ, vous pouvez utiliser ce code simple:
Dim exts() As Ssortingng = {".docx", ".ppt", ".pdf"} Dim query = (From f As FileInfo In directory.GetFiles()).Where(Function(f) exts.Contains(f.Extension.ToLower())) Response.Write(query.Count())