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$ 

``
相关推荐
糯米导航4 分钟前
Java毕业设计:办公自动化系统的设计与实现
java·开发语言·课程设计
糯米导航7 分钟前
Java毕业设计:WML信息查询与后端信息发布系统开发
java·开发语言·课程设计
MessiGo36 分钟前
Javascript 编程基础(5)面向对象 | 5.1、构造函数实例化对象
开发语言·javascript·原型模式
大霞上仙39 分钟前
nonlocal 与global关键字
开发语言·python
galaxy_strive44 分钟前
绘制饼图详细过程
开发语言·c++·qt
JohnYan1 小时前
Bun技术评估 - 03 HTTP Server
javascript·后端·bun
周末程序猿1 小时前
Linux高性能网络编程十谈|C++11实现22种高并发模型
后端·面试
ZHOU_WUYI1 小时前
Flask与Celery 项目应用(shared_task使用)
后端·python·flask
黑客老李2 小时前
JavaSec | SpringAOP 链学习分析
java·运维·服务器·开发语言·学习·apache·memcached
开开心心就好2 小时前
高效Excel合并拆分软件
开发语言·javascript·c#·ocr·排序算法·excel·最小二乘法