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$ 

``
相关推荐
eggwyw10 分钟前
C++中大括号的用法合集
开发语言·c++
xiaoye-duck12 分钟前
《C++ 项目:手写大模型接入 SDK》本地 Ollama 部署与适配
开发语言·网络·c++·语言模型
特立独行的猫A23 分钟前
13MB 单文件、一条命令变服务:把仓颉写的 cjh 内嵌进你的应用,当它的 AI 大脑
java·后端·python
联犀34 分钟前
联犀 Go SIMD 实战:视频转码从 16.5ms 到 5.46ms
开发语言·golang·音视频
octopus_c43 分钟前
STL 之 string:auto 与范围 for、常用接口、模拟实现与深浅拷贝
开发语言·c++·算法
Nerd(BUG版)1 小时前
KMP学习day5--Kotlin Flow异步流基础
开发语言·学习·kotlin
IT_陈寒1 小时前
SpringBoot实战技巧总结
前端·人工智能·后端
TeamDev1 小时前
使用 JxBrowser 在桌面应用中集成 Spring
java·前端·后端·spring·混合应用·jxbrowser·浏览器控件
J.YA1 小时前
String字符串[面试题]
java·开发语言
量化分析码农2 小时前
【Python量化多因子实战 05】因子也会轮动:因子动量与因子反转的择时应用
后端