Метод добавления из скалярного потока, вызывающий бесконечный цикл

Я использую этот код с сайта скалярного потока, он работает с методом, но он не работает, когда я пытаюсь использовать append, он выглядит как бесконечный цикл и никогда не заканчивается. Причина, по которой я хочу использовать метод добавления, состоит в том, что я не хочу переписывать файл с помощью метода to.

io.linesR(t)
  .intersperse("\n")
  .pipe(text.utf8Encode)
  .to(io.fileChunkW(target))
  .run.run //success

files.foreach(t => {
      io.linesR(t)
        .intersperse("\n")
        .pipe(text.utf8Encode)
        .append(io.fileChunkW(target))
        .run.run
    }) //the program keeps running, it looks like in an infinite loop

Я в замешательстве, может кто-нибудь объяснить мне, что здесь происходит

Спасибо заранее

1 ответ

Решение

'append' - это не добавление к файлу, это комбинатор для добавления одного процесса к другому. Я не могу сказать, что вы действительно получаете с добавлением в вашем случае, что-то странное, я думаю, что вы получаете бесконечный поток функций ByteVector => Task[Unit], и поэтому он никогда не завершается.

Вам нужен собственный метод fileChunkW, например, вы можете сделать это так:

def appendFileChunkW(f: String, bufferSize: Int = 4096, append: Boolean = true): Sink[Task,ByteVector] =
    io.chunkW(new BufferedOutputStream(new FileOutputStream(f, append), bufferSize))

files.foreach(t => {
      io.linesR(t)
        .intersperse("\n")
        .pipe(text.utf8Encode)
        .to(appendFileChunkW(target))
        .run.run
    })
Другие вопросы по тегам