TopDirectoryOnly : включает в поиск только текущий каталог.
AllDirectories : включает текущий каталог и все подкаталоги в операцию поиска. Эта опция включает в себя точки повторной обработки, такие как смонтированные диски и символические ссылки в поиске.
// searches the current directory and sub directoryint fCount = Directory.GetFiles(path, "*", SearchOption.AllDirectories).Length;
// searches the current directoryint fCount = Directory.GetFiles(path, "*", SearchOption.TopDirectoryOnly).Length;
Вы можете просто написать: var fileCount = Directory.EnumerateFiles (@ "H: \ iPod_Control \ Music", "* .mp3", SearchOption.AllDirectories) .Count ();
AndrewS
1
Я рекомендовал этот метод в случае огромных коллекций файлов. Такой подход экономит память. Метод GetFilecreate string [], который требует плоского пространства памяти. Будьте осторожны :)
hsd
15
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo("SourcePath");
int count = dir.GetFiles().Length;
Без необходимости определение списка. Это должно сработать: если Directory.Getfiles (@ "C: \ ScanPDF", "* .pdf").
Стефан Мейер
@StefanMeyer Нет, если вы воспользуетесь этим списком позже ...
Guille Bauza
@GuilleBauza Вопрос состоял в том, чтобы считать файлы PDF, а не использовать их;)
Стефан Мейер
Да, но какой смысл считать, если ты не будешь его использовать ...
Гий Бауза
3
Методы .NET Directory.GetFiles (dir) или DirectoryInfo.GetFiles () не очень быстрые для простого получения общего количества файлов. Если вы очень интенсивно используете этот метод подсчета файлов, подумайте об использовании WinAPI напрямую , что сэкономит около 50% времени.
Вот подход WinAPI, в котором я инкапсулирую вызовы WinAPI в метод C #:
Когда я ищу в папке с 13000 файлов на моем компьютере - в среднем: 110 мс
int fileCount = GetFileCount(searchDir, true); // using WinAPI
Встроенный метод .NET: Directory.GetFiles (dir) - в среднем: 230 мс
int fileCount = Directory.GetFiles(searchDir, "*", SearchOption.AllDirectories).Length;
Примечание: первый запуск любого из методов будет на 60% - 100% медленнее соответственно, потому что жесткому диску требуется немного больше времени для определения местоположения секторов. Я думаю, что последующие вызовы будут частично кэшироваться Windows.
Отличное решение, но чтобы заставить его работать, я рекомендую следующее редактирование: |||||||||||| добавить public static long fileCount = 0; |||||||||||| // int fileCount = 0; // комментарий
Маркус
3
int fileCount = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories).Length; // Will Retrieve count of all files in directry and sub directriesint fileCount = Directory.GetFiles(path, "*.*", SearchOption.TopDirectory).Length; // Will Retrieve count of all files in directry but not sub directriesint fileCount = Directory.GetFiles(path, "*.xml", SearchOption.AllDirectories).Length; // Will Retrieve count of files XML extension in directry and sub directries
Чтобы получить количество расширений определенного типа с помощью LINQ, вы можете использовать этот простой код:
Dim exts() As String = {".docx", ".ppt", ".pdf"}
Dim query = (From f As FileInfo In directory.GetFiles()).Where(Function(f) exts.Contains(f.Extension.ToLower()))
Response.Write(query.Count())
Вы можете использовать метод Directory.GetFiles
Также см. Метод Directory.GetFiles (String, String, SearchOption)
В этой перегрузке можно указать параметр поиска.
TopDirectoryOnly : включает в поиск только текущий каталог.
AllDirectories : включает текущий каталог и все подкаталоги в операцию поиска. Эта опция включает в себя точки повторной обработки, такие как смонтированные диски и символические ссылки в поиске.
// 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;
источник
Самый простой способ - использовать LINQ :
var fileCount = (from file in Directory.EnumerateFiles(@"H:\iPod_Control\Music", "*.mp3", SearchOption.AllDirectories) select file).Count();
источник
GetFile
create string [], который требует плоского пространства памяти. Будьте осторожны :)System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo("SourcePath"); int count = dir.GetFiles().Length;
Вы можете использовать это.
источник
Чтение файлов PDF из каталога:
var list = Directory.GetFiles(@"C:\ScanPDF", "*.pdf"); if (list.Length > 0) { }
источник
Методы .NET Directory.GetFiles (dir) или DirectoryInfo.GetFiles () не очень быстрые для простого получения общего количества файлов. Если вы очень интенсивно используете этот метод подсчета файлов, подумайте об использовании WinAPI напрямую , что сэкономит около 50% времени.
Вот подход WinAPI, в котором я инкапсулирую вызовы WinAPI в метод C #:
int GetFileCount(string dir, bool includeSubdirectories = false)
Полный код:
[Serializable, StructLayout(LayoutKind.Sequential)] private struct WIN32_FIND_DATA { public int dwFileAttributes; 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 string cFileName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)] public string cAlternateFileName; } [DllImport("kernel32.dll")] private static extern IntPtr FindFirstFile(string 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(string dir, bool includeSubdirectories = false) { string 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.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY) { fileCount++; continue; } if (includeSubdirectories && findFileData.cFileName != "." && findFileData.cFileName != "..") { string subDir = Path.Combine(dir, findFileData.cFileName); fileCount += GetFileCount(subDir, true); } } while (FindNextFile(hFindFile, ref findFileData)); FindClose(hFindFile); return fileCount; }
Когда я ищу в папке с 13000 файлов на моем компьютере - в среднем: 110 мс
int fileCount = GetFileCount(searchDir, true); // using WinAPI
Встроенный метод .NET: Directory.GetFiles (dir) - в среднем: 230 мс
int fileCount = Directory.GetFiles(searchDir, "*", SearchOption.AllDirectories).Length;
Примечание: первый запуск любого из методов будет на 60% - 100% медленнее соответственно, потому что жесткому диску требуется немного больше времени для определения местоположения секторов. Я думаю, что последующие вызовы будут частично кэшироваться Windows.
источник
int fileCount = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories).Length; // Will Retrieve count of all files in directry and sub directries int fileCount = Directory.GetFiles(path, "*.*", SearchOption.TopDirectory).Length; // Will Retrieve count of all files in directry but not sub directries int fileCount = Directory.GetFiles(path, "*.xml", SearchOption.AllDirectories).Length; // Will Retrieve count of files XML extension in directry and sub directries
источник
Попробуйте следующий код, чтобы получить количество файлов в папке
string strDocPath = Server.MapPath('Enter your path here'); int docCount = Directory.GetFiles(strDocPath, "*", SearchOption.TopDirectoryOnly).Length;
источник
int filesCount = Directory.EnumerateFiles(Directory).Count();
источник
Чтобы получить количество расширений определенного типа с помощью LINQ, вы можете использовать этот простой код:
Dim exts() As String = {".docx", ".ppt", ".pdf"} Dim query = (From f As FileInfo In directory.GetFiles()).Where(Function(f) exts.Contains(f.Extension.ToLower())) Response.Write(query.Count())
источник