🐥
Rustでファイルを既定のアプリで開く(Windows限定)
Rust でファイルを既定のファイルで開く(Windows 限定)
Rust を使ってファイルを既定のアプリで開くのに Windows の API を使ってたんですが、もっと単純な方法に気付いたのでメモ。
use std::process::Command;
use std::path::Path;
fn open_file(file_path: &str) -> std::io::Result<()> {
if !Path::new(file_path).exists() {
return Err(std::io::Error::new(std::io::ErrorKind::NotFound, "File not found"));
}
Command::new("cmd")
.args(&["/C", "start", "", file_path])
.spawn()?;
Ok(())
}
fn main() {
match open_file("C:\\path\\to\\your\\file.txt") {
Ok(_) => println!("File opened successfully"),
Err(e) => println!("Error opening file: {}", e),
}
}
以上。
やっていることはコマンドプロンプトで実行させているだけです。
わざわざクレートを使うこともなく実装できるのでお手軽。
Discussion
NushellというクロスプラットフォームなシェルがRustで実装されているのですが、Nuは様々なコマンドがWin/Mac/Linux共通で使えるので、例えば
embed_nu
を経由して(あるいはcmd同様にnuから直接)コマンドプロンプト等と同じ発想でNuのコマンドを呼ぶと、例えばstart
コマンドなどをWin/Mac/Linux共通で使えるので便利かもしれません。なるほど。確かにそれならOS問わずにできそうですね。
Nushell、面白そうなので少し触ってみようと思います。