我有一个名为“My / Project”的文件夹。当我尝试调用createDirectoryAtPath时,我得到两个文件夹“My”,其子文件夹为“Project”。
我已经看过终端如何代表这个:
/Users/currentuser/Documents/Projects/My\ \:\ Project
这是我的代码:
let projectName = "My / Project"
let path:NSString = "/Users/currentuser/Documents/Projects/"
let fullPath:NSString = path.stringByAppendingPathComponent(projectName)
if (!NSFileManager.defaultManager().fileExistsAtPath(fullPath:NSString))
{
do
{
try NSFileManager.defaultManager().createDirectoryAtPath(fullPath:NSString, withIntermediateDirectories: true, attributes: nil)
}
catch
{
}
}
我也尝试过:
projectName.stringByReplacingOccurrencesOfString("/", withString: "\:")
匹配终端,但Xcode抱怨无效的转义序列。
更新#1:编码文件夹名称也无法正常工作。
let encodedPath = projectName.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLUserAllowedCharacterSet())
let fullPath2:NSString = path.stringByAppendingPathComponent(encodedPath!)
NSFileManager.defaultManager().fileExistsAtPath(encodedPath!)
这样做的最佳方式是什么?
答案 0 :(得分:9)
斜杠是文件系统中的路径分隔符,不允许 在文件名组件中。
然而,OS X Finder允许带有斜杠的文件名,并且可以正常工作 通过在显示的文件名的斜杠“/”和文件系统中的冒号“:”之间进行转换。 (因此,你不能使用冒号 对于Finder中的文件名。)
因此,文件夹“My / Project”作为“My:Project”存储在文件系统中,并用未转义冒号{{1}替换文件名中的"/"
} 应该
解决你的问题。
(冒号在shell中有特殊含义,这就是你看到的原因
终端":"
。)