Получить расширение файла, содержащегося в NSString - PullRequest
52 голосов
/ 12 февраля 2012

У меня есть NSMutable словарь, который содержит идентификаторы файлов и их имена + расширение в простой форме fileone.doc или filetwo.pdf. Мне нужно определить, какой это тип файла, чтобы правильно отображать связанный значок в моем UITableView. Вот что я сделал до сих пор.

NSString *docInfo = [NSString stringWithFormat:@"%d", indexPath.row]; //Determine what cell we are formatting
NSString *fileType = [contentFiles objectForKey:docInfo]; //Store the file name in a string

Я написал два регулярных выражения, чтобы определить, какой тип файла я смотрю, но они никогда не возвращают положительный результат. Я не использовал regex в программировании на iOS раньше, поэтому я не совсем уверен, правильно ли я это делаю, но я в основном скопировал код со страницы описания класса.

    NSError *error = NULL;
NSRegularExpression *regexPDF = [NSRegularExpression regularExpressionWithPattern:@"/^.*\\.pdf$/" options:NSRegularExpressionCaseInsensitive error:&error];
NSRegularExpression *regexDOC = [NSRegularExpression regularExpressionWithPattern:@"/^.*\\.(doc|docx)$/" options:NSRegularExpressionCaseInsensitive error:&error];
    NSUInteger numMatch = [regexPDF numberOfMatchesInString:fileType options:0 range:NSMakeRange(0, [fileType length])];
    NSLog(@"How many matches were found? %@", numMatch);

Мои вопросы были бы, есть ли более простой способ сделать это? Если нет, верно ли мое регулярное выражение? И, наконец, если я должен использовать это, это дорого во время выполнения? Я не знаю, какое среднее количество файлов будет у пользователя.

Спасибо.

Ответы [ 6 ]

149 голосов
/ 12 февраля 2012

Вы ищете [fileType pathExtension]

NSString Документация: pathExtension

7 голосов
/ 12 февраля 2012
//NSURL *url = [NSURL URLWithString: fileType];
NSLog(@"extension: %@", [fileType pathExtension]);

Редактировать Вы можете использовать pathExtension на NSString

Спасибо Дэвиду Барри

4 голосов
/ 04 февраля 2015

Попробуйте это:

NSString *fileName = @"resume.doc";  
NSString *ext = [fileName pathExtension];
3 голосов
/ 12 февраля 2012

Попробуйте использовать [fileType pathExtension], чтобы получить расширение файла.

0 голосов
/ 31 марта 2017

Попробуйте, это работает для меня.

NSString *fileName = @"yourFileName.pdf";
NSString *ext = [fileName pathExtension];

Документация здесь для NSString pathExtension

0 голосов
/ 10 января 2017

В Swift 3 вы можете использовать расширение:

extension String {

public func getExtension() -> String? {

        let ext = (self as NSString).pathExtension

        if ext.isEmpty {
            return nil
        }

        return ext
    }
}
...