file_type_enum
An enum with a variant for each file type.
pub enum FileType {
Regular,
Directory,
Symlink,
BlockDevice, CharDevice, Fifo, Socket, }
If you don't need an enum, check these methods from std
instead:
Example:
use std::{fs, io, path::Path};
use file_type_enum::FileType;
fn move_file(from: &Path, to: &Path) -> io::Result<()> {
let from_type = FileType::symlink_read_at(from)?;
let to_type = FileType::symlink_read_at(to)?;
use FileType::{Directory, Regular, Symlink};
match (from_type, to_type) {
(Directory, Directory) => {
println!("Replacing directory {to:?} by directory {from:?}.");
}
(Regular, Regular) | (Symlink, Symlink) => {
println!("Overwriting {from_type} at {to:?} by {to:?}.");
}
(_, Directory) => {
println!("Moving file at {from:?} into folder {to:?}.");
fs::rename(from, to)?;
}
(_, _) => {
panic!("Cannot overwrite {to_type} with a {from_type}.");
}
}
Ok(())
}
As shown in the example FileType
also implements Display
.
Warning
Note that, like std
functions, FileType::read_at
follows symlinks, therefore it is
impossible to get the FileType::Symlink
variant. If you want symlink-awareness, use
FileType::symlink_read_at
instead.
Conversions