# FMPFile

interface FMPFile : FMPObject

Представляет собой файл либо директорию.

#### Since

21.04.01

#### Samples

    import ru.fsight.fmp.FMP
    import ru.fsight.fmp.FMPFile
    import ru.fsight.fmp.FMPUser
    import java.io.File
    fun main() {
       //sampleStart
       /*
     * Пример создания файла.
     */
    val file: FMPFile = fmp.file // Создать Builder.
    	.mount("mount") // Указать точку монтирования на сервере.
    	.remote("app/img/file.jpg") // Указать путь к файлу на сервере.
    	.local(user.cache + "/example.jpg") // Указать, где хранить файл на устройстве.
    	.directory(true) // true если работаем с директорией, false если с файлом.
    	.build() // Создать FMPFile.
       //sampleEnd
    }

    import ru.fsight.fmp.FMP
    import ru.fsight.fmp.FMPFile
    import ru.fsight.fmp.FMPUser
    import java.io.File
    fun main() {
       //sampleStart
       /*
     * Загрузка файла с сервера.
     * Аналогично с директориями.
     */
    val downloaded: Boolean = file.download().status // True если файл успешно загружен.
    val deletedCache: Boolean = file.deleteLocal().status // True если файл удалён  с устройства.
    val deletedRemote: Boolean = file.deleteRemote().status // True если файл удалён  с сервера.
       //sampleEnd
    }

    import ru.fsight.fmp.FMP
    import ru.fsight.fmp.FMPFile
    import ru.fsight.fmp.FMPUser
    import java.io.File
    fun main() {
       //sampleStart
       /*
     * Пример чтения метаданных файла.
     */
    val meta: FMPFile.Meta = file.getMeta().result  // Загрузить метаданные с сервера.

    val sizeBytes: Long = meta.size // Получить размер файла в  байтах.
    val sizeMb: Long = sizeBytes / 1000 / 1000 // Конвертировать байты в мегабайты.
    val sizeMib: Long = sizeBytes / 1024 / 1024 // Конвертировать байты в мебибайты.
       //sampleEnd
    }

    import ru.fsight.fmp.FMP
    import ru.fsight.fmp.FMPFile
    import ru.fsight.fmp.FMPUser
    import java.io.File
    fun main() {
       //sampleStart
       /*
     * Пример просмотра содержимого директории.
     */
    if (file.isDirectory) { // Содержимое есть только у директорий.
    	val list: List<FMPFile> = file.ls().result // Получить список файлов. Может быть пустым.
    	list.map { it.name } // Получить названия всех файлов внутри директории
    }
       //sampleEnd
    }

    import ru.fsight.fmp.FMP
    import ru.fsight.fmp.FMPFile
    import ru.fsight.fmp.FMPUser
    import java.io.File
    fun main() {
       //sampleStart
       /*
     * Пример поиска файлов в директориях.
     */
    val dirRoot: FMPFile = fmp.file // Создать Builder.
    	.directory(true) // Указать, что мы работаем с директорией, а не файлом.
    	.depth(2) // Указать, что мы хотим искать только в текущей директории и её под-директориях, исключая под-под-директории.
    	.build() // Создать FMPFile.

    val jpgs: List<FMPFile> =
    	dirRoot.search(".jpg", false).result // Все файлы и директории в названии которых есть .jpg.
    val images: List<FMPFile> =
    	dirRoot.search(".jpg\\|.png$".toRegex()).result // Все файлы и директории название которых оканчивается на .jpg или .png.
    jpgs.forEach { it.download() } // Загрузить все файлы.
       //sampleEnd
    }

    import ru.fsight.fmp.FMP
    import ru.fsight.fmp.FMPFile
    import ru.fsight.fmp.FMPUser
    import java.io.File
    fun main() {
       //sampleStart
       /*
     * Пример выгрузки файла на сервер.
     */
    val isUploaded: Boolean = file.upload().result // True если файл был выгружен.
       //sampleEnd
    }

    import ru.fsight.fmp.FMP
    import ru.fsight.fmp.FMPFile
    import ru.fsight.fmp.FMPUser
    import java.io.File
    fun main() {
       //sampleStart
       /*
     * Пример загрузки файла без шифрования.
     */
    val file: FMPFile = fmp.file
    	.encryption(false) // выключаем шифрование для конкретного файла/директории.
    	.build()

    file.download()
    val unencrypted: ByteArray = File(file.local).readBytes() // Считанные данные будут незашифрованны.
       //sampleEnd
    }

    import ru.fsight.fmp.FMP
    import ru.fsight.fmp.FMPFile
    import ru.fsight.fmp.FMPUser
    import java.io.File
    fun main() {
       //sampleStart
       /*
     * Пример создания директории на сервере.
     */
    val mkdir: Boolean = dir.mkdir().result // true означает, что директория создана на сервере.
       //sampleEnd
    }

    import ru.fsight.fmp.FMP
    import ru.fsight.fmp.FMPFile
    import ru.fsight.fmp.FMPUser
    import java.io.File
    fun main() {
       //sampleStart
       /*
     * Пример проверки существования файла.
     */
    val existsRemote = file.existsRemote().result // true если файл существует на сервере.
    val existsLocal = file.existsLocal().result  // true если файл существует на файловой системе устройства.
       //sampleEnd
    }

## Types

Builder
Link copied to clipboard
abstract class Builder : FMPObject.Builder
Meta
Link copied to clipboard
data class Meta(val mode: Long = -1L, val inode: Long = -1L, val dev: Long = -1L, val nlink: Long = -1L, val uid: Long = -1L, val gid: Long = -1L, val size: Long = -1L, val atime: Long = -1L, val mtime: Long = -1L, val ctime: Long = -1L, val blocks: Long = -1L, val blksize: Long = -1L, val rdev: Long = -1L)

UNIX метаданные файла на сервере. mode Права доступа. Чаще всего 755 для директорий и 644 для файлов. inode Номер INODE. Если у двух файлов одинаковый INODE - это физически один файл на файловой системе. dev ID устройства, на котором находится файл. nlink Количество жёстких ссылок на файл. uid ID владельца файла. 0 для root. gid ID группы файла. size Размер в байтах. atime UNIX время последнего доступа к файлу. mtime UNIX время последнего изменения файла. ctime UNIX время когда файл был создан. blocks Количество блоков выделенных под файл. Размер может быть меньше blksize когда у файла есть "дыры". blksize Размер блока файловой системы. rdev ID устройства если файл является специальным файлом, например блочным устройством.

## Properties

depth
Link copied to clipboard
abstract val depth: Int

Глубина, используемая при работе с директориями. Например, глубина 1 в методах search и download будет возвращать только файлы внутри текущей директории, глубина 2 в текущей и её суб-директориях без суб-суб-директорий и так далее.

encryption
Link copied to clipboard
abstract val encryption: Boolean

Используется ли шифрование. Значение не отражает использование FMP.Builder.debugNoEncryption, а только Builder.encryption.

isDirectory
Link copied to clipboard
abstract val isDirectory: Boolean

True если работаем с директорией, false если с файлом.

local
Link copied to clipboard
abstract val local: String

Полный путь к файлу на локальной файловой системе, например "/path/to/file.jpg".

mount
Link copied to clipboard
abstract val mount: String

Точка монтирования на сервере.

name
Link copied to clipboard
abstract val name: String

Имя файла. Получается из remote.

remote
Link copied to clipboard
abstract val remote: String

Относительный путь к файлу на сервере, например "path/to/file.jpg".

## Functions

deleteLocal
Link copied to clipboard
abstract fun deleteLocal(): FMPResult<Boolean>

Удалить файл с локальной файловой системы.

deleteRemote
Link copied to clipboard
abstract fun deleteRemote(): FMPResult<Boolean>

Удалить файл на сервере.

download
Link copied to clipboard
abstract fun download(): FMPResult<Boolean>

Загрузить файл или директорию на локальную файловую систему по пути local с указанным depth.

equals
Link copied to clipboard
abstract operator override fun equals(other: Any?): Boolean

Сравнить объекты между собой.

existsLocal
Link copied to clipboard
abstract fun existsLocal(): FMPResult<Boolean>

Проверка существует ли файл на локальной файловой системе по пути local.

existsRemote
Link copied to clipboard
abstract fun existsRemote(): FMPResult<Boolean>

Проверка существует ли файл на сервере по пути remote в точке монтирования mount.

getMeta
Link copied to clipboard
abstract fun getMeta(): FMPResult<FMPFile.Meta>

UNIX Meta информация о файле на сервере.

hashCode
Link copied to clipboard
abstract override fun hashCode(): Int

Хэш-код объектов. В отличие от equals он будет одинаков для объектов с одинаковыми ключевыми параметрами, но созданными от разных объектов FMP.

ls
Link copied to clipboard
abstract fun ls(): FMPResult<List<FMPFile>>

Для директории возвращает список FMPFile внутри директории на сервере с постоянной глубиной 1.

mkdir
Link copied to clipboard
abstract fun mkdir(): FMPResult<Boolean>

Создать пустую директорию на сервере.

read
Link copied to clipboard
abstract fun read(): FMPResult<ByteArray>

Расшифровать файл и получить байты данных.

rebuild
Link copied to clipboard
abstract override fun rebuild(): FMPFile.Builder
search
Link copied to clipboard
abstract fun search(regex: Regex): FMPResult<List<FMPFile>>

Поиск по регулярному выражению в именах рекурсивно внутри директории с указанным depth.

abstract fun search(search: String, ignoreCase: Boolean): FMPResult<List<FMPFile>>

Поиск строки в именах рекурсивно внутри директории с указанным depth.

toString
Link copied to clipboard
abstract override fun toString(): String

Получить ключевые параметры объекта в виде строки.

upload
Link copied to clipboard
abstract fun upload(): FMPResult<Boolean>

Выгрузить файл на сервер. Выгрузка директории не поддерживается.