Hi,
I'm using very tricky fighting methods :) to make a string like 'Fi?le*/ Name' safe for using as a file name like 'File_Name'. I'm sure there is a cocoa way to convert it. And I'm sure the best place to ask is here :)
Thank you!
Hi,
I'm using very tricky fighting methods :) to make a string like 'Fi?le*/ Name' safe for using as a file name like 'File_Name'. I'm sure there is a cocoa way to convert it. And I'm sure the best place to ask is here :)
Thank you!
Unless you're explicitly running the shell or implicitly running the shell by using a function such as popen
or system
, there's no reason to escape anything but the pathname separator.
You may also want to enforce that the filename does not begin with a full stop (which would cause Finder to hide the file) and probably should also enforce that it is not empty and is fewer than NAME_MAX
characters* long.
*syslimits.h
says bytes, but if you go through File Manager, it's characters. I'm not sure which is right for Cocoa.
If you're not too picky about what characters allowable in the file name, this should do:
NSString* sourceString = ...; // get string from somewhere
NSCharacterSet* illegalFileNameChars = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
NSString* fileNameString = [sourceString stringByTrimmingCharactersInSet:illegalFileNameChars];
If course this also trims out legal file name characters such as dashes "-
" but then again different file systems have their own notion of what's legal and what's not (think FAT and network-based file systems) and thus the lowest common denominator of legal characters for file names are letters and numbers only.