2010-08-23 13 views
14

Nie jestem zbyt biegły w programowaniu w Mac OS X, ale pracuję nad aplikacją Qt, która potrzebuje informacji o urządzeniach magazynujących. Zasadniczo lista dysków twardych i pamięci USB. Wynik końcowy powinien być jak wektora, który zawiera następujące informacje dla każdego urządzenia:Jak wyliczyć woluminy w systemie Mac OS X?

ciąg: Wytwórnia
ciąg: Punkt montowania
ciąg: Opis urządzenia (aka przyjazna nazwa)
uint64: Rozmiar
bool : Czy można go usunąć?

Robiłem to w systemie Windows, a następujący wpis Get information about disk drives result on windows7 - 32 bit system był bardzo pomocny. Jednak, mimo że jestem bardzo biegły w C/C++, nie jestem dobry w programowaniu Mac OS X, Cocoa i/lub Objective-C, więc każda pomoc byłaby bardzo cenna.

Odpowiedz

14

To powinno Ci większość tego, co szukasz (Informacje o punkt A znany zamontować.):

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 za więcej OOPness niż moja odpowiedź. :) –

+0

Dziękuję. Dokładnie to, czego potrzebuję :) Nie znalazłem sposobu na wyświetlenie informacji takich jak "Przyjazna nazwa" w systemie Windows, chociaż przypuszczam, że jest to sposób na komputerze Mac (myślałem, że to pole opisu tutaj , ale jest to system plików). Jeśli wiesz, jak odzyskać te informacje, proszę dać mi znać ... inaczej, jest niesamowicie :) – Amy

+0

@emi: Hm, nie wiem. Nie mogę znaleźć niczego podobnego za pomocą Eksploratora rejestru I/O (zlokalizowanego w '/ Developer/Applications/Utilities'). –

4

Cóż, wracamy w dniu, w którym użyliśmy FSGetVolumeInfo. Jeśli chodzi o usuwalność, byłby to FSGetVolumeParms przy użyciu vMExtendedAttributes & 1<< bIsRemovable. (Właściwie to nie pamiętam tego konkretnego API. Było coś, co nazywa się Driver Gestalt, ale już go nie ma.)

Przypuszczam, że jest lśniący interfejs Objective-C, ale jeśli nikt inny nie odpowiada, to przynajmniej C droga.

4

Spójrz na getmntinfo() (na wyliczenie punktów podłączenia) i statfs()

Powiązane problemy