rust gio-rs 挂载 samba 磁盘

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$ 

``
相关推荐
言乐620 分钟前
Python游戏水平测试辅助系统2
开发语言·windows·python·游戏·django
我不是疯子是傻子32 分钟前
Qt 实时曲线卡顿优化:从QPainter到OpenGL的3级加速实战
开发语言·qt
zlinear数据采集卡34 分钟前
D223 ADC数据处理流水线:从原始采样值到工程单位的完整转换链
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
nnerddboy1 小时前
Rust教程04:引用、借用与切片
开发语言·后端·rust
Rain的Java大神之路1 小时前
线上接口负载满了如何解决
java·数据库·redis·后端·缓存·面试·架构
jerryinwuhan2 小时前
《Python数据预处理》第四章
开发语言·python
长江&后浪2 小时前
防火墙的描述
开发语言·网络·php
观无2 小时前
若依EasyExcel实现单元格合并
开发语言·前端·javascript
雨晨源码(同名B站)2 小时前
基于Python的网易云音乐评论数据情感化分析系统 音乐爬虫信息可视化 |SnowNLP评论情感分析
开发语言·hadoop·爬虫·python·信息可视化·毕业设计
咸甜适中2 小时前
rust语言AI编程学习笔记(五)clap命令行参数解析
学习·rust·ai编程