iosfilefilenamescharacter-encodingnsfilemanager

What characters are allowed in a iOS file name?


I'm looking for a way to make sure a string can be used as a file name under iOS. I'm currently in the section of the code that deletes incompatible characters. I'm wondering if I'm doing it right.

NSString *filename = @"A file name";
fileName = [fileName stringByTrimmingCharactersInSet: [NSCharacterSet controlCharacterSet]];
fileName = [fileName stringByTrimmingCharactersInSet: [NSCharacterSet newlineCharacterSet]];

I'm also wondering if there's already a method that validates a string as a file name.

Thank you for your advice!


Solution

  • First of all, you're using the wrong method. Trimming the string will only remove characters in the beginning and the end of the string.

    What you're looking for is something more like:

    fileName = [fileName stringByReplacingOccurrencesOfString:@"/" withString:@"_"];
    

    However, that's a suboptimal solution, since you'll have to do that for every character you want to exclude, so maybe you want to keep looking or write you're own method for manipulating the string.

    iOS is UNIX based and as such I suppose it supports almost any characters in filenames. UNIX allows white spaces, <, >, |, \, :, (, ), &, ;, as well as wildcards such as ? and *, to be quoted or escaped using \ symbol. However I wouldn't use any of those characters in my filenames. In fact, I would restrict the characters in my filenames to 'a'-'z', '0'-'9', '_' and '.'.