gpt4 book ai didi

ios - 如何知道文件是否已编码?

转载 作者:行者123 更新时间:2023-11-28 07:16:33 27 4
gpt4 key购买 nike

我在 iCloud 的文档文件夹中有两种类型的文件:

  1. 文本文件
  2. 使用 NSCoding 协议(protocol)编码的文件

两种类型都使用 .txt 扩展名。 我如何知道文件是否经过编码?

因为我不知道文件是文本文件还是编码文件,所以我首先尝试打开任何文件,就好像它是编码文件一样,希望任何错误都会在打开的完成处理程序中被捕获:

var doc = MyCloudDocumentType1(fileURL: url)
doc.openWithCompletionHandler { (success: Bool) -> Void in
if success {
println("Doc. opened")
}
}

当 UIDocument 尝试加载文件内容时,我在尝试取消存档文本文件时遇到异常:

override func loadFromContents(contents: AnyObject!, ofType typeName: String!, error outError: NSErrorPointer) -> Bool {
if (contents as NSData).length == 0 {
return false
}
NSKeyedUnarchiver.unarchiveObjectWithData(contents as NSData)
return true
}

异常由 NSKeyedUnarchiver.unarchiveObjectWithData(contents as NSData) 触发,表明存在无效参数:

'NSInvalidArgumentException', reason: '*** -[NSKeyedUnarchiver initForReadingWithData:]: incomprehensible archive

这个异常是有道理的,因为我正在尝试解码文本文件(未编码的文件)。问题是我无法快速捕获异常,当我知道该文件不是编码文件时,已经来不及做某事了。

我如何知道文件是否经过编码?检测文件是否已编码并进行编码的最佳方法是什么?

谢谢!

****** 解决方案 ******

根据@AlainCollins 的评论,我读取了编码文件的前 4 个字节,因为这将是我的魔数(Magic Number):

var magicNumber = [UInt](count: 4, repeatedValue: 0)
data.getBytes(&magicNumber, length: 4 * sizeof(UInt))

然后,我将 Docs 文件夹中每个文件的前 4 个字节与这个魔数(Magic Number)进行了比较。

最佳答案

如果您真的想知道文件的格式,请检查魔数(Magic Number):http://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_numbers_in_files

如果您只想在错误中幸存下来,请遵循 AJGM 的 try/catch 建议。

关于ios - 如何知道文件是否已编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25650929/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com