4051|11

5220

帖子

236

TA的资源

管理员

楼主
 

《Rust实战》书友互动第七集:文件与存储 [复制链接]

 

小管看目录,感觉都是新鲜内容,围观你们的互动,学习一下。

 

 

 
演绎时间:即日起至6月2日
脚本限定:《Rust实战》第七章  文件与存储
 
角色分配:
提问角色(4位)和解题角色(4位)、总结角色(2位),下方跟帖第一位书友嘉宾是提问角色,第二个是解题角色,解答第一个提问,解答完后,解题角色可以继续提问,也可以不提问,结束一次问答循环。后面参与继续新起问答接龙即可,最后2位是章节总结角色,以文字或者思维导图的形式,对本章进行总结,至此一次互动结束。注意:提问角色发布的问题,要求能在第四章节书中有迹可循,且对解题者理解、学习Rust有切实意义;提问角色所发布的问题不可重复。
 

活动交流群

论坛有开设嵌入式交流群,欢迎感兴趣的小伙伴,微信添加“helloeeworld”为好友,对话:加入嵌入式交流群,入群交流。

扫码,对话:加入嵌入式交流群。

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

最新回复

大家碰到文件权限问题没有,我打开一个文件,碰见了所属权问题,可是我已经是administrator了。。。   详情 回复 发表于 2024-6-4 04:06
点赞 关注

回复
举报

2870

帖子

4

TA的资源

五彩晶圆(中级)

沙发
 

rust中的文件操作是一种较为基层的操作,文件的打开和关闭是文件与操作系统打交道的事情,怎么保证在程序操作时,能够保证程序在文件操作失败时,保证程序的控制权

 
 

回复

183

帖子

12

TA的资源

一粒金砂(高级)

板凳
 

如何解决不同环境内存存储顺序不同的情况下,落到磁盘上的存储文件可以通用的问题?

 
 
 

回复

6841

帖子

11

TA的资源

版主

4
 
提示: 该帖被管理员或版主屏蔽
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(中级)

5
 

为什么Rust使用Path,而不是直接处理字符串?

点评

主要是出于可移植性考虑,同时Path提供方法给用户直接使用比直接处理字符串意图更明显方便阅读,也避免手动进行字符串处理容易导致的错误。   但是个人觉得不就是封装一个类吗,提供一些Path操作常见的方  详情 回复 发表于 2024-5-27 23:10
 
 
 

回复

501

帖子

4

TA的资源

纯净的硅(高级)

6
 
ltaodream 发表于 2024-5-27 22:45 为什么Rust使用Path,而不是直接处理字符串?

主要是出于可移植性考虑,同时Path提供方法给用户直接使用比直接处理字符串意图更明显方便阅读,也避免手动进行字符串处理容易导致的错误。

 

但是个人觉得不就是封装一个类吗,提供一些Path操作常见的方法,好像没什么值得强调的,也不是什么创新点,不就是好比C,实现一个Path相关的操作库吗,这个好像也没必要下沉到语言层面作为语言的一个特性,如果这样的话语言标准也太臃肿了。

点评

感觉书里边不是很详细,我试着用ai了一下: Rust 中使用 Path 而不是直接处理字符串的原因有几个: 类型安全:Path 是一个结构体,它提供了一个抽象层,用于表示文件系统的路径。这使得 Rust 编译器可以在  详情 回复 发表于 2024-5-30 00:13
 
 
 

回复

4771

帖子

12

TA的资源

版主

7
 

小弟有个问题:

Rust在文件读写时,这个match用于判断开头的文件存不存在。然后会抛出panic。

那要是这个文件10W行,逐行读取需要花费2分钟,然后在这过程中,网断了,或者文件突然被删了,rust改如何抛这个错误呢?

use std::fs::File;
use std::io::ErrorKind;
fn main () {
	let f = File::open("hello.txt");
	let f = match f {
		Ok(file) => file,
		Err(error) => match error.kind() {
			ErrorKind::NotFound => match File::create("hello.txt") {
				Ok(fc) => fc,
				Err(e) => panic!("Problem creating the file: {:?}", e),
			},
			other_error => panic!("Problem opening the file: {:?}",other_error),
		},
	};
}

 

点评

你好,网上我找到一个答案,您看是否符合你的需求哈,解答如下: 在Rust中,处理文件读取时的错误通常会使用Result类型来处理,而不是直接抛出panic。当文件读取过程中出现错误,可以使用Result类型来捕获错误并  详情 回复 发表于 2024-5-31 11:15
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(中级)

8
 
qinyunti 发表于 2024-5-27 23:10 主要是出于可移植性考虑,同时Path提供方法给用户直接使用比直接处理字符串意图更明显方便阅读,也避免手 ...

感觉书里边不是很详细,我试着用ai了一下:

Rust 中使用 Path 而不是直接处理字符串的原因有几个:

  1. 类型安全:Path 是一个结构体,它提供了一个抽象层,用于表示文件系统的路径。这使得 Rust 编译器可以在编译时检查路径的合法性,而不是在运行时。通过使用 Path,Rust 可以确保路径是有效的,并且避免了一些常见的错误,比如路径遍历攻击。

  2. 跨平台兼容性:不同的操作系统有不同的文件系统路径表示方法。例如,Windows 使用反斜杠 \ 作为路径分隔符,而 Unix-like 系统使用正斜杠 /。Path 抽象允许 Rust 程序在不同的平台上透明地处理路径,而不需要编写特定于平台的代码。

  3. 功能丰富:Path 提供了多种方法来操作和查询路径,比如 join(连接路径)、parent(获取父目录)、extension(获取文件扩展名)等。这些方法使得路径操作更加直观和方便。

  4. 编码处理:在处理文件路径时,路径中的字符可能包含特殊字符或非ASCII字符。Path 可以处理这些情况,确保路径在不同环境中正确地被解释和使用。

  5. 性能:虽然字符串也可以表示路径,但是直接使用字符串可能会导致额外的字符串操作和转换,这可能会影响性能。Path 作为专门用于路径的结构体,可以优化内部表示,从而提高性能。

  6. 语义清晰:使用 Path 可以使得代码更加清晰,因为它明确表示了这是一个文件系统路径,而不是一般的字符串。这有助于提高代码的可读性和可维护性。

总的来说,Path 在 Rust 中提供了一个类型安全、功能丰富、跨平台的抽象,用于处理文件系统路径,这使得 Rust 程序更加健壮和易于维护。

 
 
 

回复

288

帖子

0

TA的资源

一粒金砂(高级)

9
 

提问:

第七章讲到了文件与存储,我发现编译好的文件生成之后都是个可执行文件,那么如果想要在MCU职中运行的话至少是个bin,这个文件转换怎么操作呢?

点评

实际上编译出来的elf文件就已经可以进行烧录了: probe-rs-cli download --format elf your_project_name.elf 当然如果你需要bin格式的文件,就需要使用对应的编译链中的objcopy工具进行格式转换: arm-non  详情 回复 发表于 2024-6-3 09:46
 
 
 

回复

288

帖子

0

TA的资源

一粒金砂(高级)

10
 
吾妻思萌 发表于 2024-5-29 08:12 小弟有个问题: Rust在文件读写时,这个match用于判断开头的文件存不存在。然后会抛出panic。 那要是 ...

你好,网上我找到一个答案,您看是否符合你的需求哈,解答如下:

在Rust中,处理文件读取时的错误通常会使用Result类型来处理,而不是直接抛出panic。当文件读取过程中出现错误,可以使用Result类型来捕获错误并进行相应的处理。例如,可以使用match语句来处理Result类型,对错误进行处理或者返回错误信息。

如果在文件读取过程中发生了网络断开或文件被删除等意外情况,Rust可以通过捕获相应的错误类型来处理这些情况。例如,可以使用match语句来处理io::Error类型的错误,然后根据具体情况进行相应的错误处理,比如重新连接网络或者提示文件不存在等。

总之,Rust提供了丰富的错误处理机制,可以帮助开发者更好地处理文件读取过程中可能出现的各种错误情况。

 
 
 

回复

44

帖子

1

TA的资源

一粒金砂(中级)

11
 
yangjiaxu 发表于 2024-5-30 22:57 提问: 第七章讲到了文件与存储,我发现编译好的文件生成之后都是个可执行文件,那么如果想要在MCU职中 ...

实际上编译出来的elf文件就已经可以进行烧录了:

probe-rs-cli download --format elf target/thumbv7em-none-eabihf/release/your_project_name.elf

当然如果你需要bin格式的文件,就需要使用对应的编译链中的objcopy工具进行格式转换:

arm-none-eabi-objcopy -O binary target/thumbv7em-none-eabihf/release/your_project_name your_project_name.bin

然后

probe-rs-cli download --format bin your_project_name.bin

 

 
 
 

回复

382

帖子

9

TA的资源

纯净的硅(初级)

12
 

大家碰到文件权限问题没有,我打开一个文件,碰见了所属权问题,可是我已经是administrator了。。。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表