2008-12-16 32 views
14

Điều này có vẻ giống như một câu hỏi ngu ngốc, vì vậy ở đây đi:Lấy ký tự ổ đĩa từ một chuỗi đường dẫn hoặc FileInfo

Khác với phân tích các chuỗi FileInfo.FullPath cho ký tự ổ đĩa để sau đó sử dụng DriveInfo ("c") vv để xem liệu có đủ không gian để viết tệp này không. Có cách nào để lấy tên ổ đĩa từ FileInfo không?

+0

Cảnh báo: Điều này sẽ không làm việc trong mọi trường hợp! Chỉ vì có đủ không gian trên thư mục gốc của ổ đĩa không có nghĩa là có đủ không gian trong thư mục hiện tại. Tương tự như vậy có thể không có không gian ở gốc nhưng có không gian trong thư mục hiện hành. Windows ít nhất là có khả năng tìm ra không gian trong thư mục hiện tại được chứng minh bằng nhiều chương trình báo cáo chính xác không gian trống trong thư mục hiện tại ngay cả khi nó không khớp với không gian tại thư mục gốc. Tôi đã không điều tra làm thế nào để thực hiện điều này. (Tình huống mà tôi đang nghĩ đến là khối lượng được ánh xạ vào các thư mục con.) –

Trả lời

31
FileInfo f = new FileInfo(path);  
string drive = Path.GetPathRoot(f.FullName); 

này sẽ trở lại "C: \". Đó thực sự là cách duy nhất khác.

1

Không có gì sai với một chuỗi ít phân tích :-)

FullPath.SubString(0,1); 
+8

Điều này đang đưa ra các giả định không an toàn về đường dẫn. Hãy xem xét trường hợp nó thực sự là một tên đường dẫn UNC của biểu mẫu \\ machinename \ share \ path \ filename.txt. –

21

Vâng, cũng có này:

FileInfo file = new FileInfo(path); 
DriveInfo drive = new DriveInfo(file.Directory.Root.FullName); 

Và hey, tại sao không phải là một phương pháp mở rộng?

public static DriveInfo GetDriveInfo(this FileInfo file) 
{ 
    return new DriveInfo(file.Directory.Root.FullName); 
} 

Sau đó, bạn chỉ có thể làm:

DriveInfo drive = new FileInfo(path).GetDriveInfo(); 
-1

Bạn có thể nhận được tất cả ổ đĩa trong hệ thống sử dụng mã này:

foreach (DriveInfo objDrive in DriveInfo.GetDrives()) 
    { 
     Response.Write("</br>Drive Type : " + objDrive.Name); 
     Response.Write("</br>Drive Type : " + objDrive.DriveType.ToString()); 
     Response.Write("</br>Available Free Space : " + objDrive.AvailableFreeSpace.ToString() + "(bytes)"); 
     Response.Write("</br>Drive Format : " + objDrive.DriveFormat); 
     Response.Write("</br>Total Free Space : " + objDrive.TotalFreeSpace.ToString() + "(bytes)"); 
     Response.Write("</br>Total Size : " + objDrive.TotalSize.ToString() + "(bytes)"); 
     Response.Write("</br>Volume Label : " + objDrive.VolumeLabel); 
     Response.Write("</br></br>"); 

    } 
+1

Không thích hợp để trả lời câu trả lời này để bao gồm liên kết spam mà Người kiểm duyệt đã xóa khỏi bài đăng của bạn. –

Các vấn đề liên quan