Строковые представления файловых путей.

Cocoa

NSString обеспечивает богатый набор методов для манипулирования строками в качестве путей файловой системы. Вы можете извлечь каталог директории, имя файла и расширение, тильду расширения выражения (например, "~me") или создать для домашнего каталога пользователя, а также очистит пути содержащих символические ссылки, избыточные слеши, и ссылки на "." (текущего каталога) и ".." (родительского каталога).

Представление пути

NSString представляет пути с '/' в качестве разделителя пути и '.' как сепаратор расширения. Методы, которые принимают строки в качестве аргументов пути преобразовывают эти общие представления к надлежащей системе конкретной формы, по мере необходимости. В системах с неявным корневым каталогом, абсолютные пути начинаются с разделителя пути или с тильды ("~/..." или "~user/..."). Если устройство должно быть указано, вы можете сделать это самостоятельно, внедрением системы зависимостей или разрешить строковому объекту, добавить устройство по умолчанию.

Вы можете создать стандартизированные представления пути, используя stringByStandardizingPath. Он выполняет ряд задач, в том числе:

  1. Расширение исходного выражения тильды;
  2. Сокращение пустых компонентов и ссылок на текущий каталог и ("//" и "/./") с одним сепаратором пути;
  3. В абсолютных путях, разрешение ссылки на родительский каталог ("..") к реальному каталогу родителя;

для примера:

NSString *path;
NSString *standardizedPath;

path = @"/usr/bin/./grep";
standardizedPath = [path stringByStandardizingPath];
// standardizedPath: /usr/bin/grep

path = @"~me";

standardizedPath = [path stringByStandardizingPath];
// standardizedPath (предположение общепринятой
    схеме именования): /Users/Me

path = @"/usr/include/objc/..";

standardizedPath = [path stringByStandardizingPath];
// standardizedPath: /usr/include

path = @"/private/usr/include";

standardizedPath = [path stringByStandardizingPath];
// standardizedPath: /usr/include

Пользовательские директории

Следующие примеры показывают, как можно использовать NSString в пути и другие функции, Cocoa, чтобы получить пользовательские директории.

//если предположить, что домашние каталоги пользователей хранятся в /Users

NSString *meHome = [@"~me" stringByExpandingTildeInPath];
// meHome = @"/Users/me"

NSString *mePublic = [@"~me/Public" stringByExpandingTildeInPath];
// mePublic = @"/Users/me/Public"

Вы можете найти домашний каталог текущего пользователя и для данного пользователя с NSHomeDirectory и NSHomeDirectoryForUser соответственно:

NSString *currentUserHomeDirectory = NSHomeDirectory();
NSString *meHomeDirectory = NSHomeDirectoryForUser(@"me");

Обратите внимание, что вы должны как правило, использовать функцию NSSearchPathForDirectoriesInDomains, чтобы найти стандартные каталоги для текущего пользователя. Например, вместо:

NSString *documentsDirectory = [NSHomeDirectory()
    stringByAppendingPathComponent:@"Documents"];

вы должны использовать:

NSString *documentsDirectory;
NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory,
    NSUserDomainMask, YES);
if ([paths count] > 0)  {
    documentsDirectory = [paths objectAtIndex:0];
}

Компоненты пути

NSString обеспечивает богатый набор методов для манипулирования строками в качестве путей файловой системы, например:

pathExtensionИнтерпретирует путь объекта-приемника и возвращает расширение, если таковое имеется.
stringByDeletingPathExtensionВозвращает новую строку, удалив расширение (если таковые имеются, и только последнее) от объекта приемника.
stringByDeletingLastPathComponentВозвращает новую строку, удалив последний компонент пути от объекта-приемника, а также любые окончательные разделители пути.

С помощью этих и связанных с ними методов, описанных в NSString классе, вы можете извлечь путь к директории, имя файла и расширение, о чем свидетельствуют следующие примеры.

NSString *documentPath = @"~me/Public/Demo/readme.txt";

NSString *documentDirectory = [documentPath stringByDeletingLastPathComponent];
// documentDirectory = @"~me/Public/Demo"

NSString *documentFilename = [documentPath lastPathComponent];
// documentFilename = @"readme.txt"

NSString *documentExtension = [documentPath pathExtension];
// documentExtension = @"txt"

Завершение имен файлов

Вы можете найти возможные расширения имен файлов, используя completePathIntoString:caseSensitive:matchesIntoArray:filterTypes:. Например, если каталог ~/Demo, который содержит следующие файлы:

ReadMe.txt readme.html readme.rtf recondite.txt test.txt
NSString *partialPath = @"~/Demo/r";
NSString *longestCompletion;
NSArray *outputArray;

unsigned allMatches = [partialPath completePathIntoString:&longestCompletion
    caseSensitive:NO
    matchesIntoArray:&outputArray
    filterTypes:NULL];

// allMatches = 3
// longestCompletion = @"~/Demo/re"
// outputArray = (@"~/Demo/readme.html", "~/Demo/readme.rtf",
                          "~/Demo/recondite.txt")

Вы можете найти возможные дополнения для пути "~/Demo/r" с расширениями “.txt” или “.rtf” как показано ниже:

NSArray *filterTypes = [NSArray arrayWithObjects:@"txt", @"rtf", nil];

unsigned textMatches = [partialPath completePathIntoString:&outputName
    caseSensitive:NO
    matchesIntoArray:&outputArray
    filterTypes:filterTypes];
    
// allMatches = 2
// longestCompletion = @"~/Demo/re"
// outputArray = (@"~/Demo/readme.rtf",
                       @"~/Demo/recondite.txt")
 
 
homeЗаметили ошибкукарта сайта 
   Made on a Mac