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!
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
orsystem
, 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.According to wikipedia, the most common characters that should be excluded from filenames are:
/\?%*|"<>
http://en.wikipedia.org/wiki/Filename
Given that, and since the invertedSet operation in the alternate solution can be intensive, to me the below is a cleaner approach:
This way you can still allow filenames that have dash, etc.
I iterated on johnboiles's answer, converting to Swift, and writing it as an extension:
Illegal character set referenced from here.
And of course there's got to be a swift2 guy with an arbitrary hate list (stolen from other answers). That guy is me:
This will remove all invalid characters anywhere in the filename based on Ismail's invalid character set (I have not verified how complete his set is).
Credit goes to Peter N Lewis for the idea to use componentsSeparatedByCharactersInSet:
NSString - Convert to pure alphabet only (i.e. remove accents+punctuation)
Solution in Swift 4
Usage: