■ Parallel 클래스의 For 정적 메소드를 사용해 디렉토리 크기를 구하는 방법을 보여준다.
▶ Parallel 클래스 : For 정적 메소드를 사용해 디렉토리 크기 구하기 예제 (C#)
1 2 3 4 5 6 7 |
using System; long directorySize = GetDirectorySize("c:\\temp", true); Console.WriteLine("디렉토리 크기 : {0:n0} 바이트", directorySize); |
▶ Parallel 클래스 : For 정적 메소드를 사용해 디렉토리 크기 구하기 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
using System.IO; using System.Threading; using System.Threading.Tasks; #region 디렉토리 크기 구하기 - GetDirectorySize(directoryPath, searchAllDirectory) /// <summary> /// 디렉토리 크기 구하기 /// </summary> /// <param name="directoryPath">디렉토리 경로</param> /// <param name="searchAllDirectory">모든 디렉토리 검색 여부</param> /// <returns>디렉토리 크기</returns> public long GetDirectorySize(string directoryPath, bool searchAllDirectory) { long directorySize = 0L; string[] filePathArray = Directory.GetFiles(directoryPath); foreach(string filePath in filePathArray) { Interlocked.Add(ref directorySize, new FileInfo(filePath).Length); } if(searchAllDirectory) { string[] childDirectoryPathArray = Directory.GetDirectories(directoryPath); Parallel.For<long> ( 0, childDirectoryPathArray.Length, () => 0, (i, loop, childDirectorySize) => { if((File.GetAttributes(childDirectoryPathArray[i]) & FileAttributes.ReparsePoint) != FileAttributes.ReparsePoint) { childDirectorySize += GetDirectorySize(childDirectoryPathArray[i], true); return childDirectorySize; } return 0; }, (x) => Interlocked.Add(ref directorySize, x) ); } return directorySize; } #endregion |