有没有办法阻止 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 导出数据和创建文件夹?的主要内容,如果未能解决你的问题,请参考以下文章