Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Program C# menganggarkan saiz folder

Program C# menganggarkan saiz folder

王林
王林ke hadapan
2023-09-07 10:33:02983semak imbas

C# 程序估计文件夹的大小

Pengenalan

Dalam artikel ini, kita akan belajar tentang program C# untuk menganggarkan saiz folder. Pada komputer kami, kami menyimpan fail dalam direktori yang dipanggil folder. Kami juga akan melihat cara menganggarkan saiz folder yang terdapat dalam fail. Mengira saiz fail sahaja tidak mencukupi untuk mencapai matlamat kami. Sebaliknya, kita juga perlu mengira saiz folder dan subfolder.

Artikel berikut akan menerangkan cara mengira saiz folder dalam tiga bahagian. Bahagian pertama yang perlu kita ketahui ialah kaedah GetFolderSize, yang akan memberi kita saiz folder. Bahagian kedua ialah kaedah FormatBytes, yang menukar saiz kepada format yang boleh dibaca manusia. Kami juga akan melihat secara ringkas pendekatan yang berbeza, yang akan menjadi penting untuk perkembangan selanjutnya artikel ini.

Kaedah

Kami akan mempelajari lima kaedah yang akan kami gunakan dalam kod untuk mengira saiz folder.

  • DirectoryInfo(dir_path) - Kaedah ini mengambil laluan direktori sebagai parameter input dan mengembalikan maklumatnya, seperti maklumat tentang fail, subfolder dan subdirektorinya.

  • GetFiles() Ia mengembalikan nama semua fail dalam satu direktori.

  • Length Ia mengembalikan saiz fail dalam bait.

  • GetDirectories() Kaedah ini akan berfungsi paling baik dalam kod kami kerana ia mengembalikan semua folder, subfolder dan subdirektori untuk satu fail.

Selain kaedah ini yang akan digunakan secara langsung dalam kod kami, terdapat satu lagi kaedah penting memandangkan konsol output.

  • FormatBytes() Saiz yang dikeluarkan oleh kaedah panjang adalah dalam bait, ia bukan dalam format yang boleh dibaca manusia, jadi untuk menukarnya kepada format rentetan yang betul, kita perlu menukarnya menggunakan kaedah FormatBytes . Kaedah ini mengambil bait sebagai input, menukarnya kepada MB atau KB mengikut keperluan, kemudian bulatkan kepada dua tempat perpuluhan dan tukar kepada rentetan.

Kami juga akan melihat cara kelas DirectoryInfo berfungsi dan penggunaannya dalam kod.

Ia membolehkan anda melakukan pelbagai operasi pada fail atau direktori. Seseorang boleh menggunakan kelas ini untuk mencipta, mengalih dan memadam fail. Ia terletak di bawah ruang nama System.Io. Ia juga menyediakan kaedah untuk bekerja dengan fail.

Algoritma

Langkah 1 Kita mesti meletakkan semua fail di satu tempat dahulu. Di sini kami menyimpan semua fail dalam semua pembolehubah fail.

Langkah 2 Sekarang kita akan beralih ke semua fail dengan mengulangi gelung dan mengira panjang setiap fail melalui kaedah Panjang.

Langkah 3 Kini kita perlu memastikan tiada subdirektori, subfolder dan folder yang terdapat dalam fail tersebut tertinggal.

Langkah 4 Kami mengalihkan secara rekursif ke setiap fail dan menyemak sama ada ia mengandungi sebarang subdirektori, subfolder atau folder.

Langkah 5Kami kini akan mengira panjang setiap fail yang ada di dalamnya dan menyimpannya dalam jumlah pembolehubah saiz folder.

Langkah 6 Kini kita perlu memastikan untuk menggunakan kaedah format bait untuk menukar jawapan akhir kepada format yang boleh dibaca manusia, menukarnya daripada saiz bait kepada format rentetan.

Langkah 7 Akhir sekali, kita boleh menggunakan fungsi konsol untuk mencetak jawapan.

Contoh

using System;
using System.IO;
Class Tutorials_point{

   // Driver code
   static public void Main() {

      DirectoryInfo folder = new DirectoryInfo("D://d2c articles");
      
      //Here we are getting the complete folder information.
      
      //This is a class that is used to get complete information about directories.
      long totalFolderSize = folderSize(folder);
      
      //here folderSize is called and we are storing the answer
      
      // in the totalFolderSize variable.
      long ans= FormatBytes(totalFolderSize);
      
      //here we are formatting the bytes size into a readable format by
      
      //calling the FormatBytes function.
      Console.WriteLine("Total folder size in bytes: " + ans);
      
      //final ans is printed.
   }
   static long folderSize(DirectoryInfo folder) {
      long totalSizeOfDir = 0;

      // Get all files into the directory
      FileInfo[] allFiles = folder.GetFiles();

      // Loop through every file and get the size of it
      foreach (FileInfo file in allFiles) {
         totalSizeOfDir += file.Length;
         
         // we are calculating the length here.
      }

      DirectoryInfo[] subFolders = folder.GetDirectories();
      
      //here we are finding if there are any subfolders or directories present inside a file.
      foreach (DirectoryInfo dir in subFolders) {
         totalSizeOfDir += folderSize(dir);
         
         //here we are recursively calling to check all the subfolders.
      }
      return totalSizeOfDir;
      
      // we return the total size here.
   }
}
public static string FormatBytes(long bytes) {
   /*This method is basically used to determine the size of the file. It determines first whether we have to complete in bytes or KB or MB or GB. If the size is between 1KB and 1MB, then we will calculate the size in KB. Similarly, if it is between MB and GB, then we will calculate it in MB.*/
   string[] sizes = { "bytes", "KB", "MB", "GB", "TB" };
   
   //here we are storing all sizes in sizes string.
   int order = 0;
   
   // we have initialized the order with zero so that it does not give us some garbage value in return.
   while (bytes >= 1024 && order < sizes.Length - 1) {
      order++;
      bytes /= 1024;
   }
   return $"{bytes:0.##} {sizes[order]}";
}

Output

Total folder size in bytes:850757

Kerumitan masa

Dalam kod yang diberikan di atas, kita melihat bahawa satu-satunya gelung yang kita ulangi ialah gelung rekursif. Dalam gelung rekursif ini, kami melihat bahawa kami hanya mengulang sehingga kami mencapai semua subfolder, fail, direktori, subdirektori dan folder. Jadi kerumitan masa ialah O(saiz fail). Selain daripada ini, semua kaedah lain hanya memerlukan kerumitan masa yang berterusan. Ini membentuk kerumitan masa O(1) dalam tatatanda Big-O. Jadi kerumitan masa terakhir hanyalah jumlah saiz folder.

Kesimpulan

Dalam artikel ini, kami telah membincangkan secara meluas cara mengira saiz folder. Kami belajar tentang kaedah dan kelas yang berbeza yang digunakan dalam kod kami. Kami juga mengetahui bahawa kami tidak boleh membuat kesimpulan hanya dengan mengira saiz fail. Kita juga mesti memastikan untuk mengira saiz semua folder, direktori, subdirektori dan subfolder. Kami juga melihat pada algoritma kod, kod itu sendiri, dan kerumitan masa. Kami berharap artikel ini telah membantu dalam meningkatkan pengetahuan anda tentang C#.

Atas ialah kandungan terperinci Program C# menganggarkan saiz folder. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Apakah operator unary dalam C#?Artikel seterusnya:Apakah operator unary dalam C#?