NSURL расширение файла, добавление и т. Д. - PullRequest
8 голосов
/ 22 июля 2011

Я получил URL с листа savePanel, и я хотел бы сделать следующее:

  • Проверьте, имеет ли он расширение
  • , если это так, удалите его
  • добавить пользовательское расширение
  • , если нет, добавьте пользовательское расширение

Любой простой способ сделать это .. Я пробовал что-то вроде следующего, но это не работает

if ( [tmp pathExtension] != @"xxx" )
   path = [tmp stringByAppendingFormat:@"xxx"];

ОК ... Возможное решение следующее

NSString *path;
NSURL *filepath;
fileurl = [sheet URL];
fileurl = [fileurl URLByDeletingPathExtension];
fileurl = [fileurl URLByAppendingPathExtension:@"yyy"];
path = [fileurl path];

Ответы [ 3 ]

7 голосов
/ 22 июля 2011

Этого можно достичь, используя методы NSString.Обратите внимание, что для сравнения строк вы должны использовать isEqualToString:, а не ==, что проверяет равенство указателей.

Об использовании расширения: -(NSString *)pathExtension;.Чтобы удалить расширение, используйте -(NSString *)stringByDeletingPathExtension;.

. Во всех случаях, чтобы добавить расширение, создайте новую строку, используя, например: +(NSString *)stringWithFormat:.

Итак:

NSString *finalString;
if([[tmp pathExtension] isEqualToString:@"xxx"]) {
    finalString = [tmp stringByDeletingPathExtension];
}
finalString = [NSString stringWithFormat:@"%@.yyy", finalString];
1 голос
/ 18 июля 2016

Альтернативный подход к работоспособному решению, предоставленному на этой же странице @ user756245, но с использованием других NSString методов:

NSString *finalString;
if([[tmp pathExtension] isEqualToString:@"xxx"]) {
    finalString = [tmp stringByDeletingPathExtension];
}

finalString = [finalString stringByAppendingPathExtension:@"yyy"];
0 голосов
/ 24 января 2019

Вот обновление для Swift 4.1 с использованием URL

// assuming you are building an URL from string
let url = URL(string: "file.abc")!
let finalUrl = url.deletingPathExtension().appendingPathExtension("mp3")
let finalString = finalUrl.path // output "file.mp3"
...