2010-07-09 63 views
10

Tôi đang làm việc trên một dự án trình cài đặt mà tôi cần trích xuất tệp vào đĩa. Làm thế nào tôi có thể tính toán/tìm không gian đĩa có sẵn trên đĩa cứng bằng cách sử dụng C#?Cách tính dung lượng đĩa trống?

+2

Bạn không thể tính toán không gian đĩa sử dụng C#. Bạn sẽ phải sử dụng .NET. –

Trả lời

9

http://msdn.microsoft.com/en-us/library/system.io.driveinfo.totalfreespace.aspx

sao chép từ liên kết

using System; 
using System.IO; 

class Test 
{ 
    public static void Main() 
    { 
     DriveInfo[] allDrives = DriveInfo.GetDrives(); 

     foreach (DriveInfo d in allDrives) 
     { 
      Console.WriteLine("Drive {0}", d.Name); 
      Console.WriteLine(" File type: {0}", d.DriveType); 
      if (d.IsReady == true) 
      { 
       Console.WriteLine(" Volume label: {0}", d.VolumeLabel); 
       Console.WriteLine(" File system: {0}", d.DriveFormat); 
       Console.WriteLine(
        " Available space to current user:{0, 15} bytes", 
        d.AvailableFreeSpace); 

       Console.WriteLine(
        " Total available space:   {0, 15} bytes", 
        d.TotalFreeSpace); 

       Console.WriteLine(
        " Total size of drive:   {0, 15} bytes ", 
        d.TotalSize); 
      } 
     } 
    } 
} 
1

Bạn có cần phải quan tâm không? Chỉ cần ghi các tệp vào đĩa và xử lý các lỗi khi cần - giả định rằng bạn sẽ phải triển khai bất kỳ trường hợp nào không liên quan đến không gian, vì vậy chỉ cần xử lý "không có dung lượng đĩa" như một lỗi khác mà bạn cần rollback cho.

Cập nhật: Nếu bạn đến đây để từ chối câu trả lời đúng này, vui lòng để lại nhận xét về lý do.

+0

Thay vì tiếp cận cẩu thả, bạn có nghĩ vậy không? Có được không gian ổ đĩa sẵn có trước thời hạn là một vấn đề khá tầm thường, và nó có thể giúp người dùng gặp nhiều rắc rối khi cài đặt một chương trình. – jrista

+0

Tôi đồng ý bạn nên cảnh báo rằng viết sẽ không thể thực hiện được nhưng bạn vẫn cần xử lý ổ đĩa hết dung lượng trong khi sao chép. –

+2

Tôi không nghĩ rằng nó là cẩu thả ở tất cả, và nó tồi tệ hơn nhiều khi một chương trình ước tính sai - có hai câu trả lời về chủ đề này và cho đến nay, không ai trong số họ hoàn tất. Chưa kể, nếu bạn phải cài đặt một số tập tin trên ổ đĩa hệ thống và một số trong ổ đĩa họ yêu cầu? Làm thế nào để bạn giải thích * rằng * cho người dùng? –

9

Sử dụng lớp System.IO.DriveInfo. Có hai tùy chọn có sẵn ... một trong đó có hạn ngạch đĩa vào tài khoản:

var drive = new DriveInfo("c"); 
long freeSpaceInBytes = drive.AvailableFreeSpace; 

và một trong đó chỉ đơn giản là cung cấp tổng dung lượng trống:

var drive = new DriveInfo("c"); 
long freeSpaceInBytes = drive.TotalFreeSpace; 
2

Bạn cũng có thể sử dụng WMI.

http://msdn.microsoft.com/en-us/library/windows/desktop/aa394173(v=vs.85).aspx

using System; 
using System.Management; 

class Test 
{ 
    static void Main() 
    { 
     var moCollection = new ManagementClass("Win32_LogicalDisk").GetInstances(); 

     foreach (var mo in moCollection) 
     { 
      if (mo["DeviceID"] != null && mo["DriveType"] != null && mo["Size"] != null && mo["FreeSpace"] != null) 
      { 
       // DriveType 3 = "Local Disk" 
       if (Convert.ToInt32(mo["DriveType"]) == 3) 
       { 
        Console.WriteLine("Drive {0}", mo["DeviceID"]); 
        Console.WriteLine("Size {0} bytes", mo["Size"]); 
        Console.WriteLine("Free {0} bytes", mo["FreeSpace"]); 
       } 
      } 
     } 
    } 
} 
Các vấn đề liên quan