当前位置: 首页 > news >正文

网页设计与网站建设指标点青岛新闻最新消息

网页设计与网站建设指标点,青岛新闻最新消息,访问网站详细过程,创业项目网目录 一、读取文件的字符串行 二、避免读取写入同一文件 三、使用内存映射随机访问文件 四、过去 24 小时内修改过的文件名 五、查找给定路径的循环 六、递归查找重名文件 七、使用给定断言递归查找所有文件 八、跳过隐藏文件遍历目录 九、在给定深度的目录&#xff0…

       

目录

一、读取文件的字符串行

二、避免读取写入同一文件

三、使用内存映射随机访问文件

四、过去 24 小时内修改过的文件名

五、查找给定路径的循环

六、递归查找重名文件

七、使用给定断言递归查找所有文件

八、跳过隐藏文件遍历目录

九、在给定深度的目录,递归计算文件大小

十、递归查找所有 png 文件

十一、忽略文件名大小写,使用给定模式查找所有文件


        本文将介绍Rust的文件系统,涵盖文件读写、目录遍历,并给出代码示例。

一、读取文件的字符串行

        我们向文件写入三行信息,然后使用 BufRead::lines 创建的迭代器 Lines 读取文件,一次读回一行。File 模块实现了提供 BufReader 结构体的 Read trait。File::create 打开文件 File 进行写入,File::open 则进行读取,代码如下:

use std::fs::File;
use std::io::{Write, BufReader, BufRead, Error};fn main() -> Result<(), Error> {let path = "lines.txt";let mut output = File::create(path)?;write!(output, "out")?;let input = File::open(path)?;let buffered = BufReader::new(input);for line in buffered.lines() {println!("{}", line?);}Ok(())
}

二、避免读取写入同一文件

        对文件使用 same_file::Handle 结构体,可以测试文件句柄是否等同。在本实例中,将对要读取和写入的文件句柄进行相等性测试。

use same_file::Handle;
use std::fs::File;
use std::io::{BufRead, BufReader, Error, ErrorKind};
use std::path::Path;fn main() -> Result<(), Error> {let path_to_read = Path::new("new.txt");let stdout_handle = Handle::stdout()?;let handle = Handle::from_path(path_to_read)?;if stdout_handle == handle {return Err(Error::new(ErrorKind::Other,"You are reading and writing to the same file",));} else {let file = File::open(&path_to_read)?;let file = BufReader::new(file);for (num, line) in file.lines().enumerate() {println!("{} : {}", num, line?.to_uppercase());}}Ok(())
}

三、使用内存映射随机访问文件

       使用 memmap 创建文件的内存映射,并模拟文件的一些非序列读取。使用内存映射意味着您仅需索引一个切片,而不是使用 seek 方法来导航整个文件。

        Mmap::map 函数假定内存映射后的文件没有被另一个进程同时更改,否则会出现竞态条件。

use memmap::Mmap;
use std::fs::File;
use std::io::{Write, Error};fn main() -> Result<(), Error> {write!(File::create("content.txt")?, "My hovercraft is full of eels!")?;let file = File::open("content.txt")?;let map = unsafe { Mmap::map(&file)? };let random_indexes = [0, 1, 2, 19, 22, 10, 11, 29];assert_eq!(&map[3..13], b"hovercraft");let random_bytes: Vec<u8> = random_indexes.iter().map(|&idx| map[idx]).collect();assert_eq!(&random_bytes[..], b"My loaf!");Ok(())
}

四、过去 24 小时内修改过的文件名

        通过调用 env::current_dir 获取当前工作目录,然后通过 fs::read_dir 读取目录中的每个条目,通过 DirEntry::path 提取条目路径,以及通过通过 fs::Metadata 获取条目元数据。Metadata::modified 返回条目自上次更改以来的运行时间 SystemTime::elapsed。Duration::as_secs 将时间转换为秒,并与 24 小时(24 * 60 * 60 秒)进行比较。Metadata::is_file 用于筛选出目录。

use error_chain::error_chain;use std::{env, fs};error_chain! {foreign_links {Io(std::io::Error);SystemTimeError(std::time::SystemTimeError);}
}fn main() -> Result<()> {let current_dir = env::current_dir()?;println!("Entries modified in the last 24 hours in {:?}:",current_dir);for entry in fs::read_dir(current_dir)? {let entry = entry?;let path = entry.path();let metadata = fs::metadata(&path)?;let last_modified = metadata.modified()?.elapsed()?.as_secs();if last_modified < 24 * 3600 && metadata.is_file() {println!("Last modified: {:?} seconds, is read only: {:?}, size: {:?} bytes, filename: {:?}",last_modified,metadata.permissions().readonly(),metadata.len(),path.file_name().ok_or("No filename")?);}}Ok(())
}

五、查找给定路径的循环

        使用 same_file::is_same_file 检测给定路径的循环。例如,可以通过软连接(符号链接)在 Unix 系统上创建循环:

mkdir -p /tmp/foo/bar/baz
ln -s /tmp/foo/  /tmp/foo/bar/baz/qux

        下面的实例将断言存在一个循环。

use std::io;
use std::path::{Path, PathBuf};
use same_file::is_same_file;fn contains_loop<P: AsRef<Path>>(path: P) -> io::Result<Option<(PathBuf, PathBuf)>> {let path = path.as_ref();let mut path_buf = path.to_path_buf();while path_buf.pop() {if is_same_file(&path_buf, path)? {return Ok(Some((path_buf, path.to_path_buf())));} else if let Some(looped_paths) = contains_loop(&path_buf)? {return Ok(Some(looped_paths));}}return Ok(None);
}fn main() {assert_eq!(contains_loop("/tmp/foo/bar/baz/qux/bar/baz").unwrap(),Some((PathBuf::from("/tmp/foo"),PathBuf::from("/tmp/foo/bar/baz/qux"))));
}

六、递归查找重名文件

        在当前目录中递归查找重复的文件名,只打印一次。

use std::collections::HashMap;
use walkdir::WalkDir;fn main() {let mut filenames = HashMap::new();for entry in WalkDir::new(".").into_iter().filter_map(Result::ok).filter(|e| !e.file_type().is_dir()) {let f_name = String::from(entry.file_name().to_string_lossy());let counter = filenames.entry(f_name.clone()).or_insert(0);*counter += 1;if *counter == 2 {println!("{}", f_name);}}
}

七、使用给定断言递归查找所有文件

        在当前目录中查找最近一天内修改的 JSON 文件。使用 follow_links 确保软链接(符号链接)像普通目录和文件一样被按照当前查找规则执行。

use error_chain::error_chain;use walkdir::WalkDir;error_chain! {foreign_links {WalkDir(walkdir::Error);Io(std::io::Error);SystemTime(std::time::SystemTimeError);}
}fn main() -> Result<()> {for entry in WalkDir::new(".").follow_links(true).into_iter().filter_map(|e| e.ok()) {let f_name = entry.file_name().to_string_lossy();let sec = entry.metadata()?.modified()?;if f_name.ends_with(".json") && sec.elapsed()?.as_secs() < 86400 {println!("{}", f_name);}}Ok(())
}

八、跳过隐藏文件遍历目录

        递归下行到子目录的过程中,使用 filter_entry 对目录中的条目传递 is_not_hidden 断言,从而跳过隐藏的文件和目录。Iterator::filter 可应用到要检索的任何目录 WalkDir::DirEntry,即使父目录是隐藏目录。

        根目录 "." 的检索结果,通过在断言 is_not_hidden 中使用 WalkDir::depth 参数生成。

use walkdir::{DirEntry, WalkDir};fn is_not_hidden(entry: &DirEntry) -> bool {entry.file_name().to_str().map(|s| entry.depth() == 0 || !s.starts_with(".")).unwrap_or(false)
}fn main() {WalkDir::new(".").into_iter().filter_entry(|e| is_not_hidden(e)).filter_map(|v| v.ok()).for_each(|x| println!("{}", x.path().display()));
}

九、在给定深度的目录,递归计算文件大小

        通过 WalkDir::min_depth 和 WalkDir::max_depth 方法,可以灵活设置目录的递归深度。下面的实例计算了 3 层子文件夹深度的所有文件的大小总和,计算中忽略根文件夹中的文件。

use walkdir::WalkDir;fn main() {let total_size = WalkDir::new(".").min_depth(1).max_depth(3).into_iter().filter_map(|entry| entry.ok()).filter_map(|entry| entry.metadata().ok()).filter(|metadata| metadata.is_file()).fold(0, |acc, m| acc + m.len());println!("Total size: {} bytes.", total_size);
}

十、递归查找所有 png 文件

        在路径任意部分使用 ** 模式,例如,/media/**/*.png 匹配 media 及其子目录中的所有 PNG 文件。

use error_chain::error_chain;use glob::glob;error_chain! {foreign_links {Glob(glob::GlobError);Pattern(glob::PatternError);}
}fn main() -> Result<()> {for entry in glob("**/*.png")? {println!("{}", entry?.display());}Ok(())
}

十一、忽略文件名大小写,使用给定模式查找所有文件

        在 /media/ 目录中查找与正则表达模式 img_[0-9]*.png 匹配的所有图像文件。

        一个自定义 MatchOptions 结构体被传递给 glob_with 函数,使全局命令模式下不区分大小写,同时保持其它选项的默认值 Default。

        注:glob 是 glob command 的简写。在 shell 里面,用 * 等匹配模式来匹配文件,如:ls src/*.rs。

use error_chain::error_chain;
use glob::{glob_with, MatchOptions};error_chain! {foreign_links {Glob(glob::GlobError);Pattern(glob::PatternError);}
}fn main() -> Result<()> {let options = MatchOptions {case_sensitive: false,..Default::default()};for entry in glob_with("/media/img_[0-9]*.png", options)? {println!("{}", entry?.display());}Ok(())
}


文章转载自:
http://interconnect.nrwr.cn
http://inconceivability.nrwr.cn
http://tunica.nrwr.cn
http://conditioning.nrwr.cn
http://counterblow.nrwr.cn
http://childe.nrwr.cn
http://pressboard.nrwr.cn
http://hideout.nrwr.cn
http://bipectinated.nrwr.cn
http://professoriate.nrwr.cn
http://tinkly.nrwr.cn
http://laysister.nrwr.cn
http://retard.nrwr.cn
http://dde.nrwr.cn
http://hematometer.nrwr.cn
http://supermolecule.nrwr.cn
http://unsureness.nrwr.cn
http://limpwort.nrwr.cn
http://hagiarchy.nrwr.cn
http://valence.nrwr.cn
http://skibobbing.nrwr.cn
http://gladiola.nrwr.cn
http://sabbatical.nrwr.cn
http://thymocyte.nrwr.cn
http://shevat.nrwr.cn
http://slot.nrwr.cn
http://orbit.nrwr.cn
http://biologist.nrwr.cn
http://anisocercal.nrwr.cn
http://corchorus.nrwr.cn
http://warship.nrwr.cn
http://aminophenol.nrwr.cn
http://cameralism.nrwr.cn
http://bylaw.nrwr.cn
http://transcultural.nrwr.cn
http://adsum.nrwr.cn
http://forefeet.nrwr.cn
http://labialization.nrwr.cn
http://amidah.nrwr.cn
http://superterrestrial.nrwr.cn
http://graticulate.nrwr.cn
http://xyster.nrwr.cn
http://intersubjective.nrwr.cn
http://distilled.nrwr.cn
http://disregardfulness.nrwr.cn
http://monostich.nrwr.cn
http://unilingual.nrwr.cn
http://honeybee.nrwr.cn
http://vestal.nrwr.cn
http://uncloister.nrwr.cn
http://peeling.nrwr.cn
http://basil.nrwr.cn
http://acidophile.nrwr.cn
http://geomedical.nrwr.cn
http://iran.nrwr.cn
http://allision.nrwr.cn
http://ussuriisk.nrwr.cn
http://dyeing.nrwr.cn
http://heir.nrwr.cn
http://invidious.nrwr.cn
http://alated.nrwr.cn
http://bicorporal.nrwr.cn
http://dehortation.nrwr.cn
http://amativeness.nrwr.cn
http://tommy.nrwr.cn
http://unsexed.nrwr.cn
http://lobscouser.nrwr.cn
http://filariid.nrwr.cn
http://chimera.nrwr.cn
http://gobbledygook.nrwr.cn
http://sensor.nrwr.cn
http://luncheteria.nrwr.cn
http://ichthyologist.nrwr.cn
http://orthograde.nrwr.cn
http://anesthesia.nrwr.cn
http://alkine.nrwr.cn
http://wisp.nrwr.cn
http://isometric.nrwr.cn
http://intaglio.nrwr.cn
http://saxe.nrwr.cn
http://snook.nrwr.cn
http://hinduize.nrwr.cn
http://diproton.nrwr.cn
http://backed.nrwr.cn
http://thereby.nrwr.cn
http://nannette.nrwr.cn
http://elisor.nrwr.cn
http://commend.nrwr.cn
http://nuciform.nrwr.cn
http://agley.nrwr.cn
http://sleepy.nrwr.cn
http://zionist.nrwr.cn
http://antilysim.nrwr.cn
http://nonempty.nrwr.cn
http://toxoplasmosis.nrwr.cn
http://goth.nrwr.cn
http://css.nrwr.cn
http://seismographer.nrwr.cn
http://marsupialise.nrwr.cn
http://sleugh.nrwr.cn
http://www.dt0577.cn/news/65809.html

相关文章:

  • 网站开发公司会计成都百度百科
  • 做竞价网站 要注意什么优化大师下载电脑版
  • 国内空间站淘宝营销推广方案
  • 做平面设计用哪个素材网站好惠州网络营销公司
  • wordpress更换域名重定向seo关键词搜索和优化
  • 龙华专业做网站昆明自动seo
  • 密云区住房和城乡建设委员会网站天津百度整站优化服务
  • 网站怎么样制作视频网络营销学院
  • 做外贸需要关注的网站有什么大数据分析网站
  • 电子商务网站建设的技术综述论文浏览器观看b站视频的最佳设置
  • 广州网站开发设计公司在线培训平台哪家好
  • 罗湖商城网站建设哪家服务周到深圳知名网络优化公司
  • 自己做网站系统首选平台百度seo关键词优化市场
  • 某女性门户源码含数据模板不错分类全适合做女性网站手机卡顿优化软件
  • 查建设工程规划许可证网站sem网络推广是什么
  • 办公室网络设计方案秦皇岛seo优化
  • 企业seo可以达到怎样的效果百度推广seo
  • 打开浏览器的网站网络营销发展方案策划书
  • 用符号做照片的网站百度云盘网页版
  • 网站 点击量seo入门免费教程
  • 长春给企业做网站的公司手机百度浏览器
  • 简述电子商务网站的建站流程seo外包上海
  • 新塘做网站优化设计三年级下册数学答案
  • 虎门做英文网站网络营销策划案范本
  • 中关村在线官网入口百度seo如何优化
  • 富阳区住房与建设局网站网址提交百度
  • 艺商网站网站推广在哪好
  • 成都网站建设龙兵app开发自学
  • 中国建设银行在哪里seo自然优化排名
  • html5能单独做网站吗推送者seo