- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在BufReader
上有一个File
。我使用read_line
从文件中读取。这以固定的速率(例如每五秒钟)进行。在这五秒钟之内,可能会删除文件并使用相同的名称重新创建该文件。不幸的是,文件和阅读器对象仍然保留了对旧的未链接文件的引用,并成为了僵尸。
MVCE:
use std::fs::File;
use std::io::{BufRead, BufReader};
use std::{thread, time};
fn main() -> std::io::Result<()> {
let mut x = String::new();
let f = File::open("foo.txt")?;
let mut reader = BufReader::new(&f);
let metadata = f.metadata()?;
let res = reader.read_line(&mut x);
println!("First: {:?}\n{:?}\n{:?}", metadata, x, res);
let duration = time::Duration::from_millis(5000);
thread::sleep(duration);
// delete the file in this time
let metadata = f.metadata()?;
let res = reader.read_line(&mut x);
println!("Second: {:?}\n{:?}\n{:?}", metadata, x, res);
Ok(())
}
我得到的输出是:
First: Metadata { file_type: FileType(FileType { mode: 33204 }), is_dir: false, is_file: true, permissions: Permissions(FilePermissions { mode: 33204 }), modified: Ok(SystemTime { tv_sec: 1610027798, tv_nsec: 326270377 }), accessed: Ok(SystemTime { tv_sec: 1610027788, tv_nsec: 510393797 }), created: Ok(SystemTime { tv_sec: 1610027786, tv_nsec: 622417600 }) }
"1\n"
Ok(2)
Second: Metadata { file_type: FileType(FileType { mode: 33204 }), is_dir: false, is_file: true, permissions: Permissions(FilePermissions { mode: 33204 }), modified: Ok(SystemTime { tv_sec: 1610027798, tv_nsec: 326270377 }), accessed: Ok(SystemTime { tv_sec: 1610027801, tv_nsec: 298233116 }), created: Ok(SystemTime { tv_sec: 1610027786, tv_nsec: 622417600 }) }
"1\n"
Ok(0)
如您所见,这两个时间戳是相同的,并且没有迹象表明基础File对象已经与主文件系统解除链接。
corresponding Python question使用
os.fstat
,但是我不知道如何使用相应的Rust替代项(我认为是
is this)。
最佳答案
标准库确实具有用于获取链接数量的方法。它们只是隐藏在特定于OS的扩展程序后面。
存在三种MetadataExt
特征,每个特征在 std::os::linux::fs
, std::os::unix::fs
和 std::os::windows::fs
中。每个都有各自的 st_nlink()
, nlinks()
和 number_of_links()
。注意Windows的是实验性的。
另外,您也可以使用 notify
crate监视文件事件。
Unix:
use std::os::unix::fs::MetadataExt;
use std::fs::File;
use std::thread;
use std::time::Duration;
fn main() {
let f = File::open("foo.txt").unwrap();
println!("{:?}", f.metadata().unwrap().nlinks());
// Prints `1`
// Now delete `foo.txt`
thread::sleep(Duration::from_secs(5));
println!("{:?}", f.metadata().unwrap().nlinks());
// Prints `0`
}
#![feature(windows_by_handle)]
use std::os::windows::fs::MetadataExt;
use std::fs::File;
use std::thread;
use std::time::Duration;
fn main() {
let f = File::open("foo.txt").unwrap();
println!("{:?}", f.metadata().unwrap().number_of_links());
// Prints `Some(1)`
// Now delete `foo.txt`
thread::sleep(Duration::from_secs(5));
println!("{:?}", f.metadata().unwrap().number_of_links());
// Prints `Some(0)`
}
关于rust - 注意文件删除和重新创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65613880/
我正在运行PHP脚本,并继续收到如下错误: 注意:未定义的变量:第10行的C:\ wamp \ www \ mypath \ index.php中的my_variable_name 注意
我正在运行PHP脚本,并继续收到如下错误: 注意:未定义的变量:第10行的C:\ wamp \ www \ mypath \ index.php中的my_variable_name 注意
我正在运行PHP脚本,并继续收到如下错误: 注意:未定义的变量:第10行的C:\ wamp \ www \ mypath \ index.php中的my_variable_name 注意
我正在运行一个PHP脚本,并且继续收到如下错误:。第10行和第11行如下所示:。这些错误消息的含义是什么?。为什么他们突然出现了?我多年来一直使用这个脚本,从来没有遇到过任何问题。。我该怎么修理它们呢
当我在 flutter clean 之后运行 flutter run 或 debug my code 时显示此错误 Note: C:\src\flutter.pub-cache\hosted\pub.
My Goal: To fix this error and be able to run my app without an error. Error Message: Note:D:\Learni
前言:今天在解决一个问题时,程序总是不能输出正确值,分析逻辑思路没问题后,发现原来是由于函数传递导致了这个情况。 LeetCode 113 问题:给你二叉树的根节点
我正在 R 中开发一个包,当我运行时 devtools::check()我收到以下说明。 checking DESCRIPTION meta-information ... NOTE Malforme
获得通知和警告波纹管 Notice: Use of undefined constant GLOB_BRACE - assumed 'GLOB_BRACE' in /var/www/html/open
我正在准备一个 R 包以提交给 CRAN。 R CMD 检查给了我以下注意: Foreign function calls to a different package: .Fortran("cinc
我正在尝试从以下位置获取数据: http://api.convoytrucking.net/api.php?api_key=public&show=player&player_name=Mick_Gi
我有这段代码,但我不明白为什么我仍然有这个错误,我已经尝试了所有解决方案,但无法解决这个问题:-注意:未定义索引:product_price-注意:未定义索引:product_quantity-注意:
This question already has answers here: “Notice: Undefined variable”, “Notice: Undefined index”, and
我正在尝试从以下位置获取数据: http://api.convoytrucking.net/api.php?api_key=public&show=player&player_name=Mick_Gi
切记,在PHP 7中不要做的10件事 1. 不要使用 mysql_ 函数 这一天终于来了,从此你不仅仅“不应该”使用mysql_函数。PHP 7 已经把它们从核心中全部移除了,也就是说你需要迁移
前几天安装了dedecms系统,当在后台安全退出的时候,后台出现空白,先前只分析其他功能去了,也没太注意安全,看了一下安全退出的代码,是这样写的: 复制代码 代码如下: function ex
我使用此代码来检查变量$n0、$n1、$n2是否未定义。 但每次未定义时我都会收到通知。我的代码是一种不好的做法吗?还有什么替代方案吗?或者只是删除通知,代码就可以了? if
编写代码时处理所有警告是否重要?在我公司中具有较高资历的开发人员坚持认为警告是无害的。诚然,其中一些是: Warning: Division by zero Notice: Undefined ind
我有一个搜索查询,执行搜索查询后,我将$ result放入数组中。 我的PHP代码- $contents = $client->search($params); // executing the se
This question already has answers here: “Notice: Undefined variable”, “Notice: Undefined index”, and
我是一名优秀的程序员,十分优秀!