有没有办法阻止 NSFilemanger 导出数据和创建文件夹?
Is there a way to prevent NSFilemanger from exporting data and creating a folder?
每当用户导出数据(它是 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,而不是在文件夹中。我只想要文件,以便用户更轻松地共享。
无论将文件保存在何处,都应在 UIActivityViewController
完成后将其删除。您可以设置完成处理程序来删除文件。
vc.completionWithItemsHandler = { (_, _, _, _) in
try? fileManager.removeItem(at: fileURL)
}
另一种选择是将文件保存在 temporaryDirectory
而不是文档中。
let fileURL = path
.temporaryDirectory
.appendingPathComponent("\(detailedList.lname!).json")
但您仍应在之后删除该文件。
每当用户导出数据(它是 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,而不是在文件夹中。我只想要文件,以便用户更轻松地共享。
无论将文件保存在何处,都应在 UIActivityViewController
完成后将其删除。您可以设置完成处理程序来删除文件。
vc.completionWithItemsHandler = { (_, _, _, _) in
try? fileManager.removeItem(at: fileURL)
}
另一种选择是将文件保存在 temporaryDirectory
而不是文档中。
let fileURL = path
.temporaryDirectory
.appendingPathComponent("\(detailedList.lname!).json")
但您仍应在之后删除该文件。