2017-08-25 16 views
1

小文字のパス/パス/ファイル/ファイルがあるとします。 ファイルシステム上では、ファイルの名前は/ path/to/Fileです。大文字小文字を区別するファイル名を確認するHFS

ファイルが正しく同じ名前であるかどうかをチェックする方法。

NSFileManager attributesOfItemAtPath:error: 
NSFileManager fileExistAtPath: 

すべてが両方のケースでYESを返します。パスのファイルシステムのreprestentationを取得し、文字列を比較する方法はありますか、ファイルが大文字と小文字を区別する名前で存在するかどうかを確認するための他の拡張メソッドがあります。

答えて

0

明示的に設定されていないとHFSは大文字と小文字を区別しません(これはお勧めできません)。つまり、/path/to/file/PaTH/tO/fILeは同等です。

ただし( ファイルシステムに保存されている)ディレクトリ内のファイルを列挙し、ファイルを開くと、その「本当の」の名前を取得することができます

NSURL* url = [NSURL fileURLWithPath:@"/path/to/file"]; 
NSArray *files = [[NSFileManager defaultManager] 
        contentsOfDirectoryAtURL:url.URLByDeletingLastPathComponent 
        includingPropertiesForKeys:nil 
        options:0 
        error:nil]; 
for (NSString* fileName in files) { 
    if ([[fileName lowercaseString] isEqualToString:@"file"]) { 
     // fileName is the case sensitive name of the file. 
    } 
} 
0

を使用してファイルの名前を見つけることができますF_GETPATHファイルシステムコントロールコール:

NSString *path = @"/tmp/x/File.txt"; 

NSFileManager *fm = [NSFileManager defaultManager]; 
int fd = open([fm fileSystemRepresentationWithPath:path], O_RDONLY); 
if (fd != -1) { 
    char buffer[MAXPATHLEN]; 
    if (fcntl(fd, F_GETPATH, buffer) != -1) { 
     NSString *realPath = [fm stringWithFileSystemRepresentation:buffer length:strlen(buffer)]; 
     NSLog(@"real path: %@", realPath); 
    } 
    close(fd); 
} 
関連する問題