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$ 

``
相关推荐
qq_174482857516 分钟前
springboot基于微信小程序的旧衣回收系统的设计与实现
spring boot·后端·微信小程序
转世成为计算机大神25 分钟前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
宅小海44 分钟前
scala String
大数据·开发语言·scala
qq_327342731 小时前
Java实现离线身份证号码OCR识别
java·开发语言
锅包肉的九珍1 小时前
Scala的Array数组
开发语言·后端·scala
心仪悦悦1 小时前
Scala的Array(2)
开发语言·后端·scala
yqcoder1 小时前
reactflow 中 useNodesState 模块作用
开发语言·前端·javascript
2401_882727571 小时前
BY组态-低代码web可视化组件
前端·后端·物联网·低代码·数学建模·前端框架
baivfhpwxf20231 小时前
C# 5000 转16进制 字节(激光器串口通讯生成指定格式命令)
开发语言·c#
许嵩661 小时前
IC脚本之perl
开发语言·perl