Swift:在文件名中使用“/”斜杠和createDirectoryAtPath

时间:2016-03-17 15:24:50

标签: swift path

我有一个名为“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!)

这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:9)

斜杠是文件系统中的路径分隔符,不允许 在文件名组件中。

然而,OS X Finder允许带有斜杠的文件名,并且可以正常工作 通过在显示的文件名的斜杠“/”和文件系统中的冒号“:”之间进行转换。 (因此,你不能使用冒号 对于Finder中的文件名。)

因此,文件夹“My / Project”作为“My:Project”存储在文件系统中,并用未转义冒号{{1}替换文件名中的"/" } 应该 解决你的问题。

(冒号在shell中有特殊含义,这就是你看到的原因 终端":"。)