繁体   English   中英

用于读写的 Dart/Flutter 锁定文件

[英]Dart/Flutter lock File for read and write

因为这是一个相当常见的问题,我想我错过了一些简单的东西,但是:

如何在 dart 中锁定(文本)文件“fileFrom”,以读取内容,将其写入另一个文件“fileTo”并删除 fileFrom 中的内容。 我需要锁定 fileFrom,因为一个单独的线程会尝试在 fileFrom 中写入日志。

我想,如果我首先使用 File.readAsStringSync() 和 File.writeAsStringSync() 这将给另一个线程在两个函数调用之间写入 FileA 的选项,不是吗?

Future<void> _moveFileContent(File fileFrom, File fileTo) async {
var string = fileFrom.readAsStringSync();
fileFrom.writeAsStringSync("");
fileTo.writeAsStringSync(string, mode: FileMode.append);
}

当我使用 File.openSync() 时,RandomAccessFile 不会给我任何数据。 (此时 FileFrom 有竞争)

var raf = fileFrom.openSync(mode: FileMode.write);
try{
  List<int> buffer = [];
  raf.readIntoSync(buffer);
  // buffer.length is 0
  var length = raf.lengthSync();
  // length is 0
}catch (e){
  locateLogger().error(e.toString());
} finally{
  raf.closeSync();
}

我错过了什么? 还是首先使用数据库更有意义?

开始像这样工作:

  final File fileToR = new File("path_1");
  final File fileToW = new File("path_2");
  RandomAccessFile rar = fileToR.openSync(mode: FileMode.read);
  RandomAccessFile raw = fileToW.openSync(mode: FileMode.write);
  try {
    List<int> buffer = [];
    while (rar.readIntoSync(buffer) > 0) raw.writeFromSync(buffer);
    RandomAccessFile fileFinal = File(rar.path).openSync(mode: FileMode.write);
    fileFinal.truncateSync(0);
  } catch (e) {
    // writelog(e.toString());
  } finally {
    // writelog(e.toString());
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM