Правильно ли имя файла

Как я могу узнать, допустимо ли имя файла для цели c? Я ничего не могу найти в задачах NSString «Работа с путями» и не думаю, что создание регулярных выражений вручную - правильный путь.


person Dani    schedule 16.06.2011    source источник
comment
Разумеется, любая строка является допустимым именем файла - HFS + использует Unicode   -  person mmmmmm    schedule 16.06.2011
comment
Даже ааа / ааа? это будет считаться каталогом   -  person Dani    schedule 16.06.2011
comment
@Mark: Я вижу, что могу переименовать в него файл на моем Mac, но как я могу сохранить файл с именем aaa/aaa? он попытается сохранить файл с именем aaa в папке с именем aaa. Даже при использовании stringByAppendingPathComponent все остается как есть.   -  person Dani    schedule 16.06.2011
comment
Что, если у вас есть папка aaa, будет работать - поэтому вы не можете сказать только по строке   -  person mmmmmm    schedule 16.06.2011
comment
Этот ответ сработал для меня: stackoverflow.com/questions/1281576/   -  person wfbarksdale    schedule 19.07.2013


Ответы (1)


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

Изменить

Если вы хотите ограничить пользователей выбором путей в текущем каталоге, вы можете сделать это:

NSArray* pathComponents = [string pathComponents];

if ([pathComponents count] != 1)
{
    // error
}
person JeremyP    schedule 16.06.2011
comment
Я хочу, чтобы мои пользователи вводили имя файла. если они введут что-то вроде ../../../../veryDangerusFile, я не хочу, чтобы программа зависала. Я хочу, чтобы он вообще не разрешал изменение каталога. - person Dani; 16.06.2011
comment
Почему не просто if ([string rangeOfString: @ /]. Location! = NSNotFound) {// error} ..? Разделение массива, чтобы увидеть, существует ли /, кажется избыточным. - person Kalle; 02.09.2012
comment
@Kalle: Мне не нравится явно предполагать, что разделителем пути является /. Лучше использовать правильный код манипулирования путями файловой системы. - person JeremyP; 05.09.2012
comment
Думаю, если вы пишете многоплатформенный код, это имеет смысл, да. (Я не.) - person Kalle; 05.09.2012