Я очень плохо знаком с Kotlin и создаю командную строку .exe в Windows, используя Kotlin / Native. Приложение должно читать из текстового файла и печатать на экране, строка за строкой. Когда он достигает последней строки файла, он должен поместить его в буфер обмена.
aFile.txt
выглядит примерно так:
one
two
three
...
...
the last line
и код read.kt
(Kotlin / Native) У меня пока есть такое:
import kotlinx.cinterop.*
import platform.posix.*
fun main(args: Array<String>) {
if (args.size != 1) {
println("Usage: read.exe <file.txt>")
return
}
val fileName = args[0]
val file = fopen(fileName, "r")
if (file == null) {
perror("cannot open input file $fileName")
return
}
try {
memScoped {
val bufferLength = 64 * 1024
val buffer = allocArray<ByteVar>(bufferLength)
do {
val nextLine = fgets(buffer, bufferLength, file)?.toKString()
if (nextLine == null || nextLine.isEmpty()) break
print("${nextLine}")
} while (true)
}
} finally {
fclose(file)
}
}
<ч />
Приведенный выше код печатает каждую строку на экране, но как мне написать строку "the last line"
в буфере обмена компьютера? Я ищу нативное (не Java) решение, если это возможно.
Большое спасибо.
<ч />
Обновление:
Очевидно, это не то решение, которое я искал, но я пока не понимаю, о чем они здесь говорят (https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setclipboarddata).
В качестве временного исправления я смог получить то, что мне было нужно, используя system()
, echo
и clip
с кодом, подобным следующему:
system("echo ${nextLine} | clip")
print("${nextLine}")