我的应用程序有一个自定义文件类型,我正在尝试更新我的代码,以便在导出或导入名称中包含“/”字符的文件时。目前,当名称中包含该字符时,应用程序无法导出文件。
这就是我导出文件的方法:
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
我需要弄清楚如何保留文件名而不创建额外的目录,因为包含 / 字符。
文件名中根本不允许使用正斜杠。
用户可以在文件应用程序和其他地方为文件指定包含
/
的名称,因为在幕后,/
正在转换为:
。您也可以在您的应用程序中执行相同的操作。
let exportedFileName = (document.name + ".stitch").replacingOccurrences(of: "/", with: ":")
“文件”应用程序和其他应用程序在显示文件名时会将
:
替换为 /
,因此对于用户来说,文件名仍然带有 /
。