[英]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.