C# में फोल्डर साइज़ कैलकुलेट करना
फोल्डर का टोटल साइज़ पाने के लिए सभी फाइल्स के साइज़ का योग करें, सबडायरेक्टरीज़ में रिकर्सिवली।
मुख्य क्लासेस
DirectoryInfo: डायरेक्टरी जानकारी और ऑपरेशन्स।FileInfo: फाइल जानकारी (Lengthप्रॉपर्टी = बाइट्स में साइज़)।Directory.EnumerateFiles(): लेज़ी फाइल एन्यूमरेशन (मेमोरी कुशल)।Directory.EnumerateDirectories(): सबडायरेक्टरीज़ एन्यूमरेट करें।
सरल LINQ दृष्टिकोण
using System;
using System.IO;
using System.Linq;
class Program {
static void Main() {
string folderPath = @"D:\Projects";
DirectoryInfo dir = new DirectoryInfo(folderPath);
// सभी फाइल्स (सबडायरेक्टरीज़ सहित) का साइज़ योग
long totalSize = dir.EnumerateFiles("*", SearchOption.AllDirectories)
.Sum(file => file.Length);
Console.WriteLine($"Total size: {totalSize} bytes");
Console.WriteLine($"Total size: {totalSize / 1024.0 / 1024:F2} MB");
}
}
रिकर्सिव मैन्युअल दृष्टिकोण (अधिक कंट्रोल)
using System;
using System.IO;
class Program {
static void Main() {
long size = GetDirectorySize(@"D:\Projects");
Console.WriteLine($"Size: {size} bytes ({size/1024/1024} MB)");
}
static long GetDirectorySize(string path) {
long size = 0;
try {
// इस डायरेक्टरी की फाइल्स
foreach (string file in Directory.EnumerateFiles(path)) {
size += new FileInfo(file).Length;
}
// सबडायरेक्टरीज़ रिकर्सिवली
foreach (string dir in Directory.EnumerateDirectories(path)) {
size += GetDirectorySize(dir);
}
}
catch (UnauthorizedAccessException) {
// एक्सेस डिनायड - स्किप
}
catch (PathTooLongException) {
// पाथ बहुत लंबा - स्किप
}
return size;
}
}
Directory क्लास के अन्य उपयोगी मेथड्स
| मेथड | विवरण |
|---|---|
CreateDirectory(path) | सभी डायरेक्टरीज़ बनाता है (पैरेंट्स सहित) |
Delete(path, recursive) | डायरेक्टरी डिलीट करता है (recursive=true से सबट्री) |
Exists(path) | डायरेक्टरी मौजूद है? |
GetFiles(path, pattern) | फाइल पाथ्स का एरे (ईगर) |
EnumerateFiles(path, pattern) | लेज़ी IEnumerable (बड़े फोल्डर्स के लिए बेहतर) |
GetDirectories(path) | सबडायरेक्टरी पाथ्स |
Move(source, dest) | डायरेक्टरी मूव/रीनेम |
नोट्स
EnumerateFiles+SearchOption.AllDirectoriesसबसे सरल है लेकिन एक्सेप्शन पर पूरी तरह फेल हो सकता है।- रिकर्सिव मैन्युअल दृष्टिकोण एक्सेप्शन हैंडलिंग (UnauthorizedAccess, PathTooLong) की अनुमति देता है।
- नेटवर्क ड्राइव्स/सिम्बॉलिक लिंक्स पर सावधानी बरतें (अनंत लूप संभव)।