有没有办法阻止 NSFilemanger 导出数据和创建文件夹?

Posted

技术标签:

【中文标题】有没有办法阻止 NSFilemanger 导出数据和创建文件夹?【英文标题】:Is there a way to prevent NSFilemanger from exporting data and creating a folder? 【发布时间】:2019-08-22 15:40:14 【问题描述】:

每当用户导出数据(它是 JSON 格式)时,它都会创建一个名为“Documents”的文件夹。并且不直接导出文件,它对我的​​ JSON 导出和 CSV 都执行此操作。

我已尝试更改 fileManager 设置,但我尝试过的似乎没有任何效果,包括更改默认值、for 和 in。后两者是当我调用 fileManger.url

这是我的 JSON 的主要导出

// MARK: - Export to Share
    func toExportJSON() 
        // Call to clear Chached exported files
        clearAllFile()
        var exportArrayJson = [exportJsonData]()

        var exportArray = [Item]()
        exportArray = fetchedRC.fetchedObjects!

        for i in exportArray 

            let newI = exportJsonData(name: i.name!, pricePer: i.pricePer, totalPrice: i.totalPrice!, isComplete: i.isComplete, Qty: i.quantity, Cat: i.catagory!, Priority: i.priority, DNH: i.didHave)

            exportArrayJson.append(newI)
        

        let encoder = JSONEncoder()
        encoder.outputFormatting = .prettyPrinted
        encoder.keyEncodingStrategy = .convertToSnakeCase

        var jsonDataTop = Data()
        do 
            let jsonData = try encoder.encode(exportArrayJson)
            jsonDataTop = jsonData

        // Old Code to print for testing
        ///if let jsonString = String(data: jsonData, encoding: .utf8) 
            ///print(jsonString)
            ///print(jsonData)
        ///

            let fileManager = FileManager.default
            do 

                let path = try fileManager.url(for: .documentDirectory, in: .allDomainsMask, appropriateFor: nil, create: false)
                let fileURL = path.appendingPathComponent("\(detailedList.lname!).json")
                try jsonDataTop.write(to: fileURL)//.write(to: fileURL)//write(to: fileURL, encoding: .utf8)

                let vc = UIActivityViewController(activityItems: [path], applicationActivities: [])

                present(vc, animated: true, completion: nil)
             catch 
                print("error creating file")
            
         catch 
            print(error.localizedDescription)
        
    

我希望这会自行导出 JSON,而不是在文件夹中。我只想要文件,以便用户更轻松地共享。

【问题讨论】:

您尝试了哪些其他目录而不是 documentDirectory 我尝试了以下方法:applicationDirectory libraryDirectory userDirectory documentationDirectory documentDirectory desktopDirectory 【参考方案1】:

无论您将文件保存在何处,都应在UIActivityViewController 完成后将其删除。您可以设置完成处理程序来删除文件。

vc.completionWithItemsHandler =  (_, _, _, _) in
    try? fileManager.removeItem(at: fileURL)

另一种选择是将文件保存在 temporaryDirectory 而不是文档中。

let fileURL = path
    .temporaryDirectory
    .appendingPathComponent("\(detailedList.lname!).json")

但之后您仍应删除该文件。

【讨论】:

好的。这解决了我不得不打电话给clearAllFile() 的问题,这在我开始导出时清除了它,但它仍然会在导出时创建一个文件夹。 (我用了你的第一个例子) 我终于让你的第二个例子工作了 Craig Siemens 并解决了问题!非常感谢您的帮助!

以上是关于有没有办法阻止 NSFilemanger 导出数据和创建文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

Android上有没有办法拦截来电/短信以阻止/取消阻止它?

有没有办法将领域数据库导出为 CSV/JSON?

有没有办法阻止 SVN 的任何变化?

s-s-rS Excel 导出

有没有办法阻止 discord.py 机器人提及角色?

有没有办法阻止派生类进一步实现虚函数?