linux 使用的 gio 管理工具
这个工具如下
这是 gio 的rust版本 https://crates.io/crates/gio
可以用 rust 语言实现下面所有操作
gio mout 挂载 samba 如下
rust
//https://valadoc.org/gio-2.0/GLib.MountOperation.html
pub async fn gio_mount(uri路径:&str, 用户名:Option<&str>, 密码:Option<&str>, 工作域:Option<&str> )->anyhow::Result<()>{
println!("gio_mount 挂载: {:?} {:?}", uri路径, 用户名);
let 文件 = gio::File::for_parse_name(uri路径);
let uri = 文件.uri().to_string();
if &uri[0..6] == "smb://"{
let mount操作 = gio::MountOperation::new();
mount操作.set_username(用户名);
mount操作.set_domain(Some(密码.unwrap_or("WORKGROUP")));
mount操作.set_password(密码);
let 尝试次数 = std::sync::Arc::new(std::sync::Mutex::new(0)); //共享且可修改
let 尝试次数_clone = 尝试次数.clone();
mount操作.connect_ask_password(move|操作,b,c,d,需求标志|{
// println!("{:?} {:?} {:?} {:?}" ,b,c,d, 需求标志);
let mut 次数 = 尝试次数_clone.lock().unwrap(); //取出共享变量
*次数 += 1;
if *次数 <= 2{
println!("gio_mount 尝试挂载次数 {:?}" ,*次数);
操作.reply(gio::MountOperationResult::Handled); //这个相当于回车键
}else{
操作.reply(gio::MountOperationResult::Unhandled); //这个中断操作
}
});
文件.mount_enclosing_volume_future(gio::MountMountFlags::NONE,Some(&mount操作) ).await?;
}
else if &uri[0..7] == "file://"{
}
else{ return Err(MyErr::错误(format!("gio_mount 无法识别协议 -> {}", uri)).into()); }
Ok(())
}
一些c函数
c
g_file_mount_enclosing_volume_finish
g_file_mount_enclosing_volume
g_mount_operation_new
lwl@lwleen:~/Desktop$ gio --help
用法:
gio 命令 [参数...]
命令:
help 打印帮助
version 打印版本
cat 串接文件,写到标准输出
copy 复制文件
info 显示关于位置的信息
launch 从桌面文件启动应用程序
list 列出某位置的内容
mime 获取或设置某种 MIME 类型的处理程序
mkdir 创建目录
monitor 监视文件和目录的更改
mount 挂载或卸载位置
move 移动文件
open 用默认应用打开文件
rename 重命名文件
remove 删除文件
save 从标准输入读取并保存
set 设置文件属性
trash 移动文件或目录到回收站
tree 在树中列出某位置的内容
使用 "gio help COMMAND" 以获取详细帮助。
lwl@lwleen:~/Desktop$
``