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$ 

``
相关推荐
一 乐1 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
Boilermaker19921 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
MM_MS2 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
꧁Q༒ོγ꧂2 小时前
LaTeX 语法入门指南
开发语言·latex
njsgcs2 小时前
ue python二次开发启动教程+ 导入fbx到指定文件夹
开发语言·python·unreal engine·ue
alonewolf_992 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
码事漫谈2 小时前
Protocol Buffers 编码原理深度解析
后端
码事漫谈2 小时前
gRPC源码剖析:高性能RPC的实现原理与工程实践
后端
古城小栈3 小时前
Rust 迭代器产出的引用层数——分水岭
开发语言·rust
ghie90903 小时前
基于MATLAB的TLBO算法优化实现与改进
开发语言·算法·matlab