簡體   English   中英

使用 FileManager 保存/創建文件夾,將其視為文件

[英]Save/create folder that it to be treated as a file with FileManager

我有一個 iOS/CatalystMacOS 應用程序,可以創建、保存、打開自定義文本文件(使用我自己的文件擴展名)。 這工作正常。 但是,現在我需要的不僅僅是文字。 我也想在這個文件中保存可選文件。 顯然 macOS(和 iOS?)可以將文件夾視為文件。 但我無法讓它按預期工作。 該文件夾仍被視為文件夾,即使它具有文件擴展名。

這是我用來創建文件夾的代碼:

func showNewFilePathDialog(from viewController: UIViewController, saveCompleted: URLCallback?) {
    guard !isPresenting else {
        return
    }
    let objectToSave = ...

    // Find an available filename
    var number = 0
    var exportURL: URL!
    var data: Data!
    var fullFileName = ""
    while true {
        let numberText = number == 0 ? "" : number.asString()
        fullFileName = "baseFileName" + "\(numberText).myFileExtension"
        exportURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent(fullFileName)

        let dict = objectToSave.toDict()
        let json = dict.json!
        data = json.data(using: .utf8)!

        if FileManager.default.fileExists(atPath: exportURL.path) {
            number += 1
            continue
        } else {
            break
        }
    }

    do {
        try FileManager.default.createDirectory(atPath: exportURL.path, withIntermediateDirectories: true, attributes: nil)
    } catch {
        NSLog("Couldn't create document directory")
        viewController.presentErrorDialog(from: error)
        return
    }

    // 2. Create containing json file
    do {
        try data.write(to: exportURL.appendingPathComponent("content.json"))
    } catch {
        viewController.presentErrorDialog(from: error)
        return
    }      
    isPresenting = true
    self.onSaveDialogComplete = saveCompleted
    let pickerViewController = UIDocumentPickerViewController(url: exportURL, in: .exportToService)
    pickerViewController.delegate = self
    viewController.present(pickerViewController, animated: true)
}

然后它在 macOS finder 中顯示如下:

在此處輸入圖片說明

它會在 iOS 中顯示類似,也不允許我將文件夾作為單個文件打開。

編輯:使用 UIDocument/public.composite-content/FileWrapper 似乎也有效,但問題仍然在於:在 macOS finder 中查看時,它仍被視為文件夾。 此外,當嘗試通過 UIDocumentPickerViewController 從打開對話框中打開應用程序時,嘗試打開文件包只會打開文件夾,而不會讓我將其打開到應用程序中:(

這是我的 info.list 導出類型 UTI: 在此處輸入圖片說明

Edit2:還嘗試刪除除 com.apple.package 之外的所有內容,但也不起作用。 仍然無法打開我的自定義類型,因為它的行為類似於文件夾。

得到它的工作。 似乎我的應用程序的舊版本干擾了系統文件類型。 所以我搜索了我的應用程序名稱並從我的計算機中刪除了舊版本。 然后系統識別出我的文件后綴,馬上打開了!

但是這次我丟失了圖標,但這是另一個問題:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM