У меня есть приложение, которое непоследовательно возвращает 'nil' при использовании FileHandle для открытия файла для чтения.Я на OSX (10.13.4), XCode 9.4, Swift 4.1
Это приложение OSX использует NSOpenPanel (), чтобы получить список файлов, выбранных пользователем.Мой код класса 'model' открывает эти файлы для создания коллекции структур данных. Код, который делает это, начинается следующим образом и успешно получает FileHandle КАЖДЫЙ РАЗ для любого файла и может читать данные из файла.
private func getFITHeader(filename: String) {
let file: FileHandle? = FileHandle(forReadingAtPath: filename)
if file == nil {
print("FITFile >>> File open failed for file \(filename)")
}
else {
var databuffer: Data
databuffer = (file?.readData(ofLength: 80))!
:
:
}
Файлы также содержат блок двоичных данных, которые я обрабатываю в другой части приложения.Пока я разрабатываю код для этого, я временно жестко кодирую одно и то же имя файла, которое работает выше для целей тестирования.НО этот код (ниже) ВСЕГДА выдает исключение ' Поток 1: неустранимая ошибка: неожиданно обнаружил nil при развертывании необязательного значения ', когда он попадает в fileHandle? .Seek () - по какой-то причине попытка создатьFileHandle всегда возвращает nil, несмотря на то, что код функционально идентичен приведенному выше.
@IBAction func btnProcFile(_ sender: Any) {
var data: Data
let filename = "/Users/johncneal/Dropbox/JN Astronomy/Astronomy/Spectroscopy/RSpec_Analyses/Gamma_Cas/20161203/Gamma Cas_065.fit"
let fileHandle: FileHandle? = FileHandle(forReadingAtPath: filename)
fileHandle?.seek(toFileOffset: 2880) //skip past the headers
let dataLenToRead = 1391 * 1039 * 2
data = (fileHandle?.readData(ofLength: dataLenToRead))!
:
:
}
Код во второй функции прекрасно работает на игровой площадке (не придавая этому особого значения) и, что странноТакже работал, когда временно добавлен в другой проект.Вероятно, также стоит упомянуть, что длина пути к файлу, кажется, не имеет значения - он ведет себя одинаково на коротких путях.
Итак, вопрос в том, почему такое поведение FileHandle надежно несовместимо?
print () - имена файлов, представленные FileHandle (), показали, что они идентичны в каждом случае (см. Ниже).Так что я озадачен и расстроен этим - любые перспективы или обходные пути будут оценены.
/ Users / johncneal / Dropbox / JN Astronomy / Астрономия / Спектроскопия / RSpec_Analyses / Gamma_Cas / 20161203 / Gamma Cas_065.fit
/ Пользователи / johncneal / Dropbox / JN Astronomy / Астрономия / Спектроскопия / RSpec_Analyses / Gamma_Cas / 20161203 / Gamma Cas_065.fit