Signed-off-by: denis0001-dev <denis0001.dev@ya.ru>
This commit is contained in:
2026-02-19 01:20:27 +03:00
Unverified
parent 928d00b665
commit 323ec99c12
9 changed files with 478 additions and 166 deletions
@@ -0,0 +1,47 @@
package com.pr0gramm3r101.utils.files
import kotlinx.cinterop.ExperimentalForeignApi
import kotlinx.cinterop.addressOf
import kotlinx.cinterop.usePinned
import platform.Foundation.NSData
import platform.Foundation.NSFileManager
import platform.Foundation.NSCachesDirectory
import platform.Foundation.NSSearchPathForDirectoriesInDomains
import platform.Foundation.NSUserDomainMask
import platform.Foundation.create
import platform.Foundation.writeToFile
@OptIn(ExperimentalForeignApi::class)
internal actual fun expectExists(path: String): Boolean =
NSFileManager.defaultManager.fileExistsAtPath(path)
@OptIn(ExperimentalForeignApi::class)
internal actual fun expectWriteBytes(path: String, bytes: ByteArray) {
val nsData = bytes.usePinned { pinned ->
NSData.create(bytes = pinned.addressOf(0), length = bytes.size.toULong())
}
nsData?.writeToFile(path, true)
}
internal actual fun expectDelete(path: String) {
NSFileManager.defaultManager.removeItemAtPath(path, null)
}
internal actual fun expectDeleteFilesWithPrefix(dirPath: String, namePrefix: String) {
val contents = NSFileManager.defaultManager.contentsOfDirectoryAtPath(dirPath, null)
?: return
(contents as List<*>).filterIsInstance<String>().forEach { name ->
if (name.startsWith(namePrefix)) {
NSFileManager.defaultManager.removeItemAtPath("$dirPath/$name", null)
}
}
}
internal actual fun expectGetAppCacheDirectory(): String {
val paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, true)
return (paths.firstOrNull() as? String) ?: ""
}
internal actual fun expectEnsureDirectory(path: String) {
NSFileManager.defaultManager.createDirectoryAtPath(path, true, null, null)
}