#kotlin #kotlin-multiplatform #kotlin-native
Вопрос:
Я хотел бы выполнить некоторые основные операции с файловой системой в Windows mingwX64 (и, возможно, на других платформах): открывать, закрывать, читать, переименовывать, получать метаданные, перечислять файлы в каталоге.
Я нашел один проект, который обещает реализовать эту функциональность: KotlinxIO. Однако за последние годы не было достигнуто никакого прогресса.
Существуют ли какие-либо другие альтернативы или обходные пути?
Ответ №1:
В конце концов, я воспользовался библиотекой Корио. Документация могла бы быть лучше, но вся необходимая мне функциональность реализована для всех платформ (Jvm, Desktop, Android, ..):
import com.soywiz.korio.file.std.*
suspend fun main {
val cwd = localCurrentDirVfs
val files = cwd.list()
cwd["Hello.txt"].open().close()
cwd["Hello.txt"].renameTo("Hi.txt")
val metadata = cwd["Hi.txt"].stat()
}
Кроме того, он позволяет использовать один и тот же API для доступа к онлайн-файлам, zip-архивам и т.д. что довольно аккуратно.
Ответ №2:
Возможно, вам захочется взглянуть на ОКИО. Существует некоторая поддержка мультиплатформенности и целевой объект Windows, но я не знаю из первых рук, реализована ли часть файловой системы в Windows: https://github.com/square/okio
Ответ №3:
К сожалению, единственный обходной путь прямо сейчас-использовать ожидаемый/фактический шаблон https://kotlinlang.org/docs/mpp-connect-to-apis.html. Затем вы можете использовать java.io
для Android, Bundle
iOS и т.д. В зависимости от вашей целевой платформы
Комментарии:
1. @Алекс. T ответ правильный.
java.io
должен работать и в Windows, как и любая другая библиотека, которую вы использовали бы в любом другом приложении java(google для этого), но этот код следует использовать только внутри кода части Windows(фактического), чтобы использовать его из общего, вам нужно создать методы expect/actual.2. Кажется невозможным
import java.io
вывернутьсяmingwX64Main
наизнанку из коробки.