【发布时间】:2021-10-06 18:28:35
【问题描述】:
我将打开的文件存储在地图中:HashMap<u32, File>。有时会调用函数 read_to_file 和 write_to_file。他们从地图中获取文件并进行相应的程序。为了避免从同一个文件写入和读取的冲突,我需要关闭该文件。我该怎么做?
【问题讨论】:
-
通过删除
std::fs::File来关闭文件,您可能不希望或可以在您拥有的数据结构中执行此操作。为避免您描述的冲突,您可以将File包装在std::cell::RefCell中,并在您想写入File时使用try_borrow_mut(),并在读取时使用try_borrow()。拥有对std::fs::File的可变引用实际上并不需要写入它,但这样可以使读/写互斥。 -
@user2722968 我对不同的对象进行写入和读取(所以我打开了两个文件:一个用于读取,一个用于写入),它们都引用硬盘驱动器上的同一个文件
-
sync_data可以在这里使用吗? doc.rust-lang.org/stable/std/fs/… -
这有意义吗:
let f: File = self.streams.remove(&stream_id).unwrap(); drop(f);?