This crate contains Rust bindings for Native File Dialog Extended (NFDe), a small library for invoking native file dialogs on Windows, MacOS, and Linux.
It supports four kinds of dialogs:
- Open file
- Open multiple files
- Save file
- Pick folder
This crate should be regarded as experimental for now — while upstream NFDe is stable, these Rust bindings are still in flux.
For more information and screenshots, please see the upstream NFDe repository.
The following dependencies need to be installed on your machine manually (Cargo will not install it for you):
- CMake
- A decent C/C++ compiler (MSVC, Clang, or GCC are known to work)
You might also need to place CMake on your PATH so that the build script can find it.
use nfde::*;
fn main() -> Result<(), nfde::Error> {
// Initialize NFD... NFD will be automatically deinitialized when this object is destroyed
let nfd = Nfd::new()?;
// Show the dialog...
// Note: .show() will block until the dialog is closed
// You can also set a default path using .default_path(Path)
let res = nfd
.open_file()
.add_filter("Source code", "c,cpp,cc")?
.add_filter("Headers", "h,hpp")?
.show();
match res {
DialogResult::Ok(path_buf) => {
println!("Success!");
println!("Path: {}", path_buf.display());
}
DialogResult::Cancel => {
println!("User pressed cancel.");
}
DialogResult::Err(error_str) => {
println!("Error: {}", error_str);
}
};
Ok(())
}
See the /examples
directory for more examples.