Sie können die Suchoption in dieser Überladung angeben.
TopDirectoryOnly : Schließt nur das aktuelle Verzeichnis in eine Suche ein.
AllDirectories : Enthält das aktuelle Verzeichnis und alle Unterverzeichnisse in einer Suchoperation. Diese Option umfasst Analysepunkte wie gemountete Laufwerke und symbolische Links in der Suche.
// 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;
Darf ich vorschlagen, "*" zu verwenden, um Dateien abzugleichen, andernfalls werden Dateien ohne Erweiterungen nicht in die Zählung einbezogen.
Nick Bull
Dies scheint die Anzahl der Unterordner einzuschließen. Das heißt, ich habe einen Unterordner und in einem ansonsten leeren Verzeichnis und dies gibt 1 zurück.
Seien Sie freundlich zu neuen Benutzern
@ MichaelPotter ist es möglich, dass es desktop.ini gezählt hat?
Heriberto Lugo
Für eine aktuellere Lösung, die weniger Ressourcen benötigt, ersetzen Sie GetFiles () durch EnumerateFiles () und Length durch Count ()
relativ
21
Die einfachste Methode wäre die Verwendung von LINQ :
var fileCount = (from file in Directory.EnumerateFiles(@"H:\iPod_Control\Music", "*.mp3", SearchOption.AllDirectories)
select file).Count();
Sie könnten einfach schreiben: var fileCount = Directory.EnumerateFiles (@ "H: \ iPod_Control \ Music", "* .mp3", SearchOption.AllDirectories) .Count ();
AndrewS
1
Ich habe diese Methode bei großen Dateisammlungen empfohlen. Dieser Ansatz spart Speicher. Methode GetFilecreate string [], die flachen Speicherplatz benötigt. Seien Sie vorsichtig :)
hsd
15
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo("SourcePath");
int count = dir.GetFiles().Length;
Unnötig Definition einer Liste. Dies sollte den Job erledigen: wenn Directory.Getfiles (@ "C: \ ScanPDF", "* .pdf"). Count> 0
Stefan Meyer
@StefanMeyer Nein , wenn Gonna Sie diese Liste verwenden später ...
Guille Bauza
@ GuilleBauza Die Frage war, die PDF-Dateien zu zählen, nicht zu verwenden;)
Stefan Meyer
Ja, aber was bringt es zu zählen, wenn Sie es nicht benutzen ...
Guille Bauza
3
.NET-Methoden Directory.GetFiles (dir) oder DirectoryInfo.GetFiles () sind nicht sehr schnell, um nur die Gesamtanzahl der Dateien zu ermitteln. Wenn Sie diese Dateizählmethode sehr häufig verwenden, sollten Sie WinAPI direkt verwenden , was etwa 50% der Zeit spart.
Hier ist der WinAPI-Ansatz, bei dem ich WinAPI-Aufrufe in eine C # -Methode kapsle:
Wenn ich in einem Ordner mit 13000 Dateien auf meinem Computer suche - Durchschnitt: 110 ms
int fileCount = GetFileCount(searchDir, true); // using WinAPI
Integrierte .NET-Methode: Directory.GetFiles (dir) - Durchschnitt: 230 ms
int fileCount = Directory.GetFiles(searchDir, "*", SearchOption.AllDirectories).Length;
Hinweis: Der erste Durchlauf einer der beiden Methoden ist jeweils 60% bis 100% langsamer, da das Auffinden der Sektoren auf der Festplatte etwas länger dauert. Nachfolgende Aufrufe werden vermutlich von Windows halb zwischengespeichert.
Tolle Lösung, aber um es zum Laufen zu bringen, empfehle ich die folgende Bearbeitung: |||||||||||| add public static long fileCount = 0; |||||||||||||| // int fileCount = 0; // auskommentieren
Markus
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
Um die Anzahl bestimmter Typerweiterungen mit LINQ zu ermitteln, können Sie diesen einfachen Code verwenden:
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())
Sie können die Directory.GetFiles- Methode verwenden
Siehe auch Directory.GetFiles-Methode (String, String, SearchOption)
Sie können die Suchoption in dieser Überladung angeben.
TopDirectoryOnly : Schließt nur das aktuelle Verzeichnis in eine Suche ein.
AllDirectories : Enthält das aktuelle Verzeichnis und alle Unterverzeichnisse in einer Suchoperation. Diese Option umfasst Analysepunkte wie gemountete Laufwerke und symbolische Links in der Suche.
// 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;
quelle
Die einfachste Methode wäre die Verwendung von LINQ :
var fileCount = (from file in Directory.EnumerateFiles(@"H:\iPod_Control\Music", "*.mp3", SearchOption.AllDirectories) select file).Count();
quelle
GetFile
create string [], die flachen Speicherplatz benötigt. Seien Sie vorsichtig :)System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo("SourcePath"); int count = dir.GetFiles().Length;
Sie können dies verwenden.
quelle
Lesen von PDF-Dateien aus einem Verzeichnis:
var list = Directory.GetFiles(@"C:\ScanPDF", "*.pdf"); if (list.Length > 0) { }
quelle
.NET-Methoden Directory.GetFiles (dir) oder DirectoryInfo.GetFiles () sind nicht sehr schnell, um nur die Gesamtanzahl der Dateien zu ermitteln. Wenn Sie diese Dateizählmethode sehr häufig verwenden, sollten Sie WinAPI direkt verwenden , was etwa 50% der Zeit spart.
Hier ist der WinAPI-Ansatz, bei dem ich WinAPI-Aufrufe in eine C # -Methode kapsle:
int GetFileCount(string dir, bool includeSubdirectories = false)
Vollständiger Code:
[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; }
Wenn ich in einem Ordner mit 13000 Dateien auf meinem Computer suche - Durchschnitt: 110 ms
int fileCount = GetFileCount(searchDir, true); // using WinAPI
Integrierte .NET-Methode: Directory.GetFiles (dir) - Durchschnitt: 230 ms
int fileCount = Directory.GetFiles(searchDir, "*", SearchOption.AllDirectories).Length;
Hinweis: Der erste Durchlauf einer der beiden Methoden ist jeweils 60% bis 100% langsamer, da das Auffinden der Sektoren auf der Festplatte etwas länger dauert. Nachfolgende Aufrufe werden vermutlich von Windows halb zwischengespeichert.
quelle
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
quelle
Versuchen Sie den folgenden Code, um die Anzahl der Dateien im Ordner zu ermitteln
string strDocPath = Server.MapPath('Enter your path here'); int docCount = Directory.GetFiles(strDocPath, "*", SearchOption.TopDirectoryOnly).Length;
quelle
int filesCount = Directory.EnumerateFiles(Directory).Count();
quelle
Um die Anzahl bestimmter Typerweiterungen mit LINQ zu ermitteln, können Sie diesen einfachen Code verwenden:
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())
quelle