폴더의 파일 수
ASP를 사용하여 폴더에서 파일 수를 가져오려면 어떻게 해야 합니까?NET with C#?
디렉토리도 참조해 주세요.GetFiles 메서드(String, String, Search Option)
이 오버로드에서 검색 옵션을 지정할 수 있습니다.
톱 디렉토리한정: 현재 디렉토리만 검색에 포함합니다.
모든 디렉토리:현재 디렉터리와 모든 하위 디렉터리를 검색 작업에 포함합니다.이 옵션은 마운트된 드라이브 및 심볼 링크와 같은 재분석 지점을 검색에 포함합니다.
// 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;
System.IO.Directory myDir = GetMyDirectoryForTheExample();
int count = myDir.GetFiles().Length;
가장 슬릭한 방법은 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;
이거 써도 돼요.
디렉토리에서 PDF 파일 읽기:
var list = Directory.GetFiles(@"C:\ScanPDF", "*.pdf");
if (list.Length > 0)
{
}
.NET 메서드디렉토리GetFiles(dir) 또는 DirectoryInfo.GetFiles()는 총 파일 수를 얻는 데만 그리 빠르지 않습니다.이 파일 수 방법을 매우 많이 사용하는 경우 WinAPI를 직접 사용하는 것이 좋습니다.이렇게 하면 약 50%의 시간을 절약할 수 있습니다.
WinAPI 콜을 C# 메서드로 캡슐화하는 WinAPI 접근법은 다음과 같습니다.
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개의 파일이 있는 폴더를 검색하는 경우 - 평균: 110ms
int fileCount = GetFileCount(searchDir, true); // using WinAPI
.NET 내장 메서드:디렉토리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
int filesCount = Directory.EnumerateFiles(Directory).Count();
다음 코드를 사용하여 폴더의 파일 수를 가져옵니다.
string strDocPath = Server.MapPath('Enter your path here');
int docCount = Directory.GetFiles(strDocPath, "*",
SearchOption.TopDirectoryOnly).Length;
「 」를 사용하고 MVC
및 IIS
전개에서는, 다음의 방법을 사용하고, 지정한 디렉토리내의 파일수를 취득할 수 있습니다.
string myFilesDir = System.Web.Hosting.HostingEnvironment.MapPath("~/MyServerDirectory/");
var countFiles = (from file in Directory.EnumerateFiles(myFilesDir, "*", SearchOption.AllDirectories)
select file).Count();
시스템IO 네임스페이스는 이러한 기능을 제공합니다.파일 및 데이터 스트림에 대한 읽기 및 쓰기를 허용하는 유형 및 기본 파일 및 디렉터리 지원을 제공하는 유형이 포함됩니다.
를 들어, 「」의 하는 는, 「」를 참조해 .C:\
디렉토리에서는 다음과 같이 말할 수 있습니다(다른 '\'와 함께 '\' 문자를 이스케이프해야 합니다).
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo("C:\\");
int count = dir.GetFiles().Length;
또한 를 이스케이프할 도 있습니다.이 경우 의 모든 "\"는 "\"로 되지 않습니다.("C:\\")
이렇게 말할 수 있어요.(@"C:\")
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())
언급URL : https://stackoverflow.com/questions/2242564/file-count-from-a-folder
'programing' 카테고리의 다른 글
디스크에서 이미 삭제된 여러 파일을 Git repo에서 제거 (0) | 2023.04.24 |
---|---|
IF 함수 - 공식을 반복하지 않는 방법이 있습니까? (0) | 2023.04.24 |
Xcode 6 Beta 4에서 앱을 실행할 때 "MyApp.app" 파일을 볼 수 있는 권한이 없기 때문에 열 수 없습니다. (0) | 2023.04.24 |
SQL Server에서의 왼쪽 조인과 왼쪽 외부 조인의 비교 (0) | 2023.04.19 |
C++에서 대소문자를 구분하지 않는 문자열 비교 (0) | 2023.04.19 |