Swift 中支持带有“/”字符的自定义文件

问题描述 投票:0回答:1

我的应用程序有一个自定义文件类型,我正在尝试更新我的代码,以便在导出或导入名称中包含“/”字符的文件时。目前,当名称中包含该字符时,应用程序无法导出文件。

这就是我导出文件的方法:

static func exportDocument(_ document: StitchDocument) async -> SentTransferredFile {
        log("StitchDocumentWrapper: transferRepresentation: exporting: called")

        let projectURL = document.getUrl()
        
        // Use the original document name (which may contain '/') for the exported file
        let exportedFileName = document.name + ".stitch"
        
        // Create the temporary export URL in the temporary directory
        let tempExportURL = StitchFileManager.tempDir.appendingPathComponent(exportedFileName)

        log("StitchDocumentWrapper: transferRepresentation: projectURL: \(projectURL)")
        log("StitchDocumentWrapper: transferRepresentation: tempExportURL: \(tempExportURL)")

        do {
            // Remove any existing file at the temp export URL
            try? FileManager.default.removeItem(at: tempExportURL)
            
            // Zip existing project url's contents to the temp export URL
            try FileManager.default.zipItem(at: projectURL, to: tempExportURL)

            // Return the SentTransferredFile with the temp file URL
            return SentTransferredFile(tempExportURL)
        } catch {
            log("StitchDocumentWrapper: transferRepresentation: FAILED: error: \(error)")
            // In case of error, still try to return a file, but it might not contain the correct data
            return SentTransferredFile(tempExportURL)
        }
    }

请注意,

StitchFileManager
FileManager
的子类。

具体的问题是,导出文件时,总是会创建额外的目录。因此,名为

1/2/3.stitch
的文件将在以下目录中创建一个文件:

file:///Users/nicholasarner/Library/Containers/app.stitchdesign.stitch/Data/tmp/1/2/3.stitch

我需要弄清楚如何保留文件名而不创建额外的目录,因为包含 / 字符。

ios swift nsfilemanager
1个回答
0
投票

文件名中根本不允许使用正斜杠。

用户可以在文件应用程序和其他地方为文件指定包含

/
的名称,因为在幕后,
/
正在转换为
:
。您也可以在您的应用程序中执行相同的操作。

let exportedFileName = (document.name + ".stitch").replacingOccurrences(of: "/", with: ":")

“文件”应用程序和其他应用程序在显示文件名时会将

:
替换为
/
,因此对于用户来说,文件名仍然带有
/

© www.soinside.com 2019 - 2024. All rights reserved.