更严谨一些,干脆都用PathBuf了

This commit is contained in:
shenjack 2024-01-21 18:00:23 +08:00
parent 2135d66767
commit 6a707f891b
Signed by: shenjack
GPG Key ID: 7B1134A979775551
2 changed files with 12 additions and 34 deletions

View File

@ -1,4 +1,5 @@
use std::fmt::Display;
use std::path::PathBuf;
pub const HELP_MESSAGE: &str = r#"call [options] [--] [arguments]
Options:
@ -6,7 +7,6 @@ Options:
--show Show console window
--chdir Change working directory to lib (default)
--chdir=xxx Change working directory to xxx
--dir=xxx Working directory is xxx
--bin=xxx Specify executable file
--config=xxx Specify configuration file
--help Print this help message
@ -15,9 +15,8 @@ Options:
#[derive(Clone)]
pub struct Config {
pub show_console: bool,
pub chdir: Option<String>,
pub bin: Option<String>,
pub dir: Option<String>,
pub chdir: Option<PathBuf>,
pub bin: PathBuf,
pub config: Option<String>,
pub bin_arg: String,
}
@ -29,7 +28,6 @@ impl Display for Config {
s.push_str(&format!(" show_console: {}\n", self.show_console));
s.push_str(&format!(" chdir: {:?}\n", self.chdir));
s.push_str(&format!(" bin: {:?}\n", self.bin));
s.push_str(&format!(" dir: {:?}\n", self.dir));
s.push_str(&format!(" config: {:?}\n", self.config));
s.push_str(&format!(" bin_arg: {:?}\n", self.bin_arg));
s.push_str("}");
@ -42,7 +40,7 @@ impl Config {
let mut show_console = false;
let mut chdir: Option<String> = None;
let mut bin: Option<String> = None;
let mut dir: Option<String> = None;
let dir: Option<String> = None;
let mut config: Option<String> = None;
let mut bin_arg = "".to_string();
// -- 表示后面的参数都是可执行文件的参数
@ -68,7 +66,6 @@ impl Config {
// --show 表示显示控制台
// --chdir 表示切换工作目录
// --chdir=xxx 表示切换工作目录到xxx
// --dir=xxx 表示工作目录是xxx
// --bin=xxx 表示指定可执行文件
// --config=xxx 表示指定配置文件
// --help 输出上面这一堆东西
@ -81,19 +78,23 @@ impl Config {
show_console = true;
} else if args[i].starts_with("--chdir=") {
chdir = Some(args[i][8..].to_string());
} else if args[i].starts_with("--dir=") {
dir = Some(args[i][6..].to_string());
} else if args[i].starts_with("--bin=") {
bin = Some(args[i][6..].to_string());
} else if args[i].starts_with("--config=") {
config = Some(args[i][9..].to_string());
}
}
// 拼接上 dir
let bin = if let Some(dir) = dir {
PathBuf::from(dir).join(bin.unwrap_or("main".to_string()))
} else {
PathBuf::from(bin.unwrap_or("./lib/main".to_string()))
};
let chdir = chdir.map(|x| PathBuf::from(x));
Some(Config {
show_console,
chdir,
bin,
dir,
config,
bin_arg,
})

View File

@ -1,6 +1,4 @@
#![windows_subsystem = "windows"]
use std::process::Command;
// #![windows_subsystem = "windows"]
#[cfg(windows)]
mod win;
@ -20,25 +18,4 @@ fn main() {
// 输出相关信息
println!("call {}", VERSION);
println!("config: {}", config);
if config.show_console {
win::show_window();
} else {
win::hide_window();
}
if config.chdir.is_some() {
std::env::set_current_dir(config.chdir.unwrap()).unwrap();
}
if config.dir.is_some() {
std::env::set_current_dir(config.dir.unwrap()).unwrap();
}
if config.config.is_some() {
std::env::set_current_dir(config.config.unwrap()).unwrap();
}
if config.bin.is_some() {
let mut cmd = Command::new(config.bin.unwrap());
if config.bin_arg.len() > 0 {
cmd.arg(config.bin_arg);
}
cmd.spawn().unwrap();
}
}