2010-08-23 40 views
14

Tôi không thành thạo về lập trình Mac OS X, nhưng tôi đang làm việc trên ứng dụng Qt cần thông tin về thiết bị lưu trữ. Về cơ bản một danh sách các ổ đĩa cứng và ổ USB. Kết quả cuối cùng sẽ như một vector chứa các thông tin sau đây cho mỗi thiết bị:Làm thế nào để liệt kê khối lượng trên Mac OS X?

chuỗi: Nhãn
chuỗi: Núi điểm
chuỗi: Device mô tả (tên aka thân thiện)
uint64: Kích thước
bool : Có thể tháo rời?

Tôi đã thực hiện nó trên Windows và bài đăng sau Get information about disk drives result on windows7 - 32 bit system đã được trợ giúp rất nhiều. Tuy nhiên, mặc dù tôi rất thành thạo trong C/C++ Tôi không thực sự tốt trong lập trình Mac OS X, Cocoa và/hoặc Objective-C, do đó, bất kỳ trợ giúp sẽ được nhiều đánh giá cao.

Trả lời

14

này sẽ giúp bạn có hầu hết những gì bạn đang tìm kiếm (đối với thông tin về một biết điểm gắn kết.):

NSWorkspace *ws = [NSWorkspace sharedWorkspace]; 
NSArray  *vols = [ws mountedLocalVolumePaths]; 
NSFileManager *fm = [NSFileManager defaultManager]; 

for (NSString *path in vols) 
{ 
    NSDictionary* fsAttributes; 
    NSString *description, *type, *name; 
    BOOL removable, writable, unmountable, res; 
    NSNumber *size; 

    res = [ws getFileSystemInfoForPath:path 
          isRemovable:&removable 
          isWritable:&writable 
         isUnmountable:&unmountable 
          description:&description 
            type:&type]; 
    if (!res) continue; 
    fsAttributes = [fm fileSystemAttributesAtPath:path]; 
    name   = [fm displayNameAtPath:path]; 
    size   = [fsAttributes objectForKey:NSFileSystemSize]; 

    NSLog(@"path=%@\nname=%@\nremovable=%d\nwritable=%d\nunmountable=%d\n" 
      "description=%@\ntype=%@, size=%@\n\n", 
      path, name, removable, writable, unmountable, description, type, size); 
} 
+0

+1 để biết nhiều hơn OOPness hơn câu trả lời của tôi. :) –

+0

Cảm ơn bạn. Điều này thực hiện chính xác những gì tôi cần :) Tôi không tìm cách hiển thị thông tin như 'Tên thân thiện' trên cửa sổ, mặc dù tôi cho rằng có cách để thực hiện trên máy Mac (tôi nghĩ đây là trường mô tả ở đây , nhưng đó là một hệ thống tập tin). Nếu bạn biết cách truy xuất thông tin đó, vui lòng cho tôi biết ... nếu không, nó thật tuyệt vời :) – Amy

+0

@emi: Hm, tôi không biết. Tôi thậm chí không thể tìm thấy bất cứ điều gì như thế này bằng cách sử dụng I/O Registry Explorer (nằm trong '/ Developer/Applications/Utilities'). –

4

Vâng, quay lại ngày chúng tôi sử dụng FSGetVolumeInfo. Đối với tính năng xóa, có thể là FSGetVolumeParms sử dụng vMExtendedAttributes & 1<< bIsRemovable. (Thực ra, tôi không nhớ lại API cụ thể đó. Có một thứ gọi là Driver Gestalt, nhưng nó đã biến mất rồi.)

Tôi cho rằng có một giao diện Objective-C sáng bóng, nhưng nếu không ai trả lời, ít nhất là có C đường.

4

Hãy xem getmntinfo() (đối với một điều tra của điểm lắp) và statfs()

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