osx: удалить все символы из строки, которые нельзя использовать для имен файлов в osx - PullRequest
0 голосов
/ 15 февраля 2012

Существует ли какой-нибудь стандартный метод удаления всех символов из строки, который нельзя использовать для имен файлов в osx? Соответствуют ли символы, которые вам разрешено использовать, какой-либо часто используемой категории? (Я знаю, что определение списка разрешенных символов было бы возможно, но я хочу иметь возможность использовать имена файлов из нескольких языков (китайский, в частности), так что это будет немного болезненно.) Решение, которое работает и в Ubuntu было бы здорово.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2012

Разрешен любой символ Юникода, кроме "/". Поскольку ваш вопрос также связан с AppleScript, я должен сообщить вам, что в путях Macintosh отображается символ «/», а реальный символ - «:». Поэтому, когда вы говорите Finder создать папку по пути «Macintosh HD: Пользователи: короткое имя: Рабочий стол: изображения / фильмы», тогда в POSIX это будет выглядеть так: «/Users/shortname/Desktop/images:movies".

0 голосов
/ 15 февраля 2012

Я использую следующий код для преобразования произвольной строки в правильное имя файла. Он следует правилам (если не тем же), что и при создании файла webloc при перетаскивании URL-адреса на рабочий стол.

// Returns a sting representing this filename transformed (if neccesary) to make
// a valid (Mac OS X) filename.
- (NSString *) stringByMakingFileNameValid:(NSString *)fileName
{
    NSMutableString * validFileName = [NSMutableString stringWithString:fileName];
    if (!validFileName || [validFileName isEqualToString:@""]) {
        return @"untitled";
    }
    // remove initial period chars "."
    if ([validFileName hasPrefix:@"."]) {
        NSRange dotRange = [validFileName rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:@"."]];
        [validFileName deleteCharactersInRange:dotRange];
    }
    // remove any colon chars ":" (same as webloc creation behaviour)
    [validFileName replaceOccurrencesOfString:@":" withString:@"" options:0 range:NSMakeRange(0, [validFileName length])];
    // this may lead to spaces at either end which need trimming
    validFileName = [[[validFileName stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] mutableCopy] autorelease];

    // if there is nothing left return default value
    if ([validFileName isEqualToString:@""]) {
        return @"untitled";
    }
    // replace other disallowed Mac OS X characters
    [validFileName replaceOccurrencesOfString:@"/" withString:@"-" options:0 range:NSMakeRange(0, [validFileName length])];

    // if grater than 102 chars reduce to 101 and add elipses
    if ([validFileName length] > 102) {
        [validFileName deleteCharactersInRange:NSMakeRange(100, [validFileName length]-100)];
        [validFileName appendString:@"…"];
    }

    return [[validFileName copy] autorelease];
}

На уровне Дарвина символы "/" хранятся как символы ":" (и наоборот). Они удалены здесь по косметическим причинам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...