如何取消dart中的文件读取操作?

问题描述 投票:0回答:1

我有 dart 代码,可以将文件打开为

RandomAccessFile
并从文件中读取数据并通过 Http 将字节流式传输到视频播放器,但是当用户查找视频时,我需要将文件的位置设置为新位置,并且再次阅读会引发异常

FileSystemException:异步操作当前正在挂起

这是因为之前的读取请求尚未完成,我请求了新的读取。 我如何取消/处置读取的旧文件以便我可以读取新位置?

dart streaming randomaccessfile dart-io
1个回答
0
投票

没有直接的方法可以做到这一点,但您可以为此创建辅助函数:

class FileHelper {
  bool _cancel = false;

  Future<void> fileReadWithCancel(String path) async {
    final file = File(path);
    final stream = file.openRead();
    final sub = stream.listen(null);

    sub.onData((data) {
      if (_cancel) {
        sub.cancel();
        print('Canceled!');
        return;
      }
      // Handle data.
    });
    sub.onError((error) {
      if (_cancel) {
        sub.cancel();
        print('Canceled!');
        return;
      }
      // Handle error with log from dart:developer or similar.
    });

    sub.onDone(() {
      // Good! :D
    });
  }

  void cancel() => _cancel = true;
}

这是包含辅助函数并使用

_cancel
标志的类。 调用
cancel
方法后,您将停止阅读内容,并且流将关闭。

这是一个例子:

import 'dart:io';

import 'package:flutter/material.dart';

Future<void> main() async {
  final helper = FileHelper();
  helper.fileReadWithCancel(path); //Path to your file.
  await Future.delayed(const Duration(seconds: 2));
  helper.cancel();
}

这代表了一个最小的示例,您可以根据自己的代码对其进行修改和调整。

© www.soinside.com 2019 - 2024. All rights reserved.