[英]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.