Mi sono guardato intorno e non ho trovato alcuna API per quello. Ci sono due possibilità mi viene in mente:
- La creazione di un file temporaneo e cercando di aprirlo con un modello caso diverso, per esempio creando "a9999" e tentando di aprire "A9999". Considerando che né "a9999" né "A9999" erano disponibili su quella particolare directory, il filesystem distingue tra maiuscole e minuscole se e solo se l'apertura di "A9999" fallisce.
- In esecuzione
diskutil(8)
contro il filesystem. Segnala in modo diverso i file system sensibili al maiuscolo/minuscolo: Name: Mac OS Extended (Case-sensitive)
rispetto a Name: Mac OS Extended
(non registrato su giornale).
Poiché
diskutil(8)
è in grado di identificarlo, è possibile che questa informazione sia disponibile tramite alcune chiamate API o di sistema.
Edit: Si scopre che NSURL
ha una serie di metodi che funzionano sulle proprietà del file system. In particolare, -getResourceValue:forKey:error
con la chiave NSURLVolumeSupportsCaseSensitiveNamesKey
indica se un determinato file system (rappresentato come istanza NSURL
) supporta i nomi case sensitive.
Vedere il seguente codice per un esempio del suo utilizzo.
#include <Foundation/Foundation.h>
int main(int argc, char *argv[]) {
NSAutoreleasePool *pool = [NSAutoreleasePool new];
NSString *path = [NSString stringWithCString:argv[1] encoding:NSASCIIStringEncoding];
NSURL *filesystem = [NSURL fileURLWithPath:path isDirectory:YES];
NSNumber *caseSensitiveFS;
BOOL hasCaseSensitiveResource;
hasCaseSensitiveResource = [filesystem getResourceValue:&caseSensitiveFS
forKey:NSURLVolumeSupportsCaseSensitiveNamesKey error:NULL];
if (hasCaseSensitiveResource)
{
if ([caseSensitiveFS intValue] == 1)
{
NSLog(@"%s is a case sensitive filesystem", argv[1]);
}
else
{
NSLog(@"%s is a case insensitive filesystem", argv[1]);
}
}
else
{
NSLog(@"can't query %s for case sensitiveness", argv[1]);
}
[pool drain];
return 0;
}
Esempio di stampa:
./testcase/
/is a case insensitive filesystem
./testcase /Volumes/Disk\ Image/
/Volumes/Disk Image/ is a case sensitive filesystem
./testcase nonono
can't query nonono for case sensitiveness
fonte
2011-01-16 16:00:41
Ah roba eccellente. Grazie molto. – trojanfoe
http://lists.apple.com/archives/darwin-dev/2007/Apr/msg00036.html suggerisce che non è affidabile. – thakis