Подтягивать .txt файлы из базы Realm


#1

Всем привет! Кто работал с бд Realm, подскажите, можно ли в ней хранить .txt файлы и подтягивать их в приложение?


#2

Realm имеет тип Data, значит может хранить бинарники. По идее, если архивировать текстовый файл и после разархивировать, то можно писать его как бинарный тип в эту самую Data. Принцип похожий на хранение изображений в БД.

Но…

Реалм имеет ограничение на объем в поле базы данных. Порядка 6 мб, если память не изменяет. Проще работать с текстовым файлом так: записывать и читать тхт с диска, а в Реалм хранить просто ссылку на сам файл.

Штатных средств айос вполне достаточно для работы с текстовыми файлами

Вот нагуглил пример:

let fileName = "Test"
let dir = try? FileManager.default.url(for: .documentDirectory, 
      in: .userDomainMask, appropriateFor: nil, create: true)

// If the directory was found, we write a file to it and read it back
if let fileURL = dir?.appendingPathComponent(fileName).appendingPathExtension("txt") {

    // Write to the file named Test
    let outString = "Write this text to the file"
    do {
        try outString.write(to: fileURL, atomically: true, encoding: .utf8)
    } catch {
        print("Failed writing to URL: \(fileURL), Error: " + error.localizedDescription)
    }

    // Then reading it back from the file
    var inString = ""
    do {
        inString = try String(contentsOf: fileURL)
    } catch {
        print("Failed reading from URL: \(fileURL), Error: " + error.localizedDescription)
    }
    print("Read from the file: \(inString)")
}

#3

Спасибо за очень подробной ответ. Проблема в том, что я не хочу утяжелять приложение и хранить файлы на диске т.к. файлов будет много и в последующем объем будет расти. Точнее файлы рано или поздно появятся на диске, но пусть это произойдет по согласию пользователя на загрузку. Поэтому есть мысли вынести все на сторонний сервис.