簡體   English   中英

如何使用網址初始化OutputStream?

[英]How to initialise an OutputStream with a Url?

我嘗試為應用程序組文件夾創建一個OutputStream,其創建如下:

 func createProjectDirectoryPath(path:String) -> String
    {
        let containerURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.xyz")
        let logsPath = containerURL!.appendingPathComponent(path)
        NSLog("12345- folder path: %@", logsPath.path)

        do {
            try FileManager.default.createDirectory(atPath: logsPath.path, withIntermediateDirectories: true, attributes: nil)
        } catch let error as NSError {
            NSLog("12345- Unable to create directory %@", error.debugDescription)
        }
        return logsPath.path
    }

這個功能給我這樣的路徑

/private/var/mobile/Containers/Shared/AppGroup/40215F20-4713-4E23-87EF-1E21CCFB45DF/pcapFiles

該文件夾存在,因為FileManager.default.fileExists(path)行返回true。 下一步是將生成的文件名附加到路徑,我在這里做

let urlToFile = URL(string: createProjectDirectoryPath(path: "pcapFiles").appending("/\(filename)"))

這給了我正確的新道路

/private/var/mobile/Containers/Shared/AppGroup/40215F20-4713-4E23-87EF-1E21CCFB45DF/pcapFiles/39CC2DB4-A6D9-412E-BAAF-2FAA4AD70B22.pcap

如果我叫這行, ostream總是nil

let ostream = OutputStream(url: urlToFile!, append: false)

我想念什么嗎? OutputStream應該在此路徑上創建文件,但是由於未知原因,這是不可能的。

PS:在功能和開發人員控制台中啟用了AppGroup。

您的createProjectDirectoryPath()函數返回文件路徑,因此您必須使用URL(fileURLWithPath:)將其轉換為URL 或者,修改您的函數以返回一個URL

func createProjectDirectoryPath(path:String) -> URL? {
    let containerURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.xyz")
    let logsURL = containerURL!.appendingPathComponent(path)
    do {
        try FileManager.default.createDirectory(at: logsURL, withIntermediateDirectories: true)
    } catch let error as NSError {
        NSLog("Unable to create directory %@", error.debugDescription)
        return nil
    }
    return logsURL
}

此外,必須在所有Stream對象上調用open()才能使用它們,如果以前不存在該文件,還將創建該文件:

guard let logsURL = createProjectDirectoryPath(path: "pcapFiles") else {
    fatalError("Cannot create directory")
}
let urlToFile = logsURL.appendingPathComponent(filename) 
guard let ostream = OutputStream(url: urlToFile, append: false) else {
    fatalError("Cannot open file")
}
ostream.open()

暫無
暫無

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

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