Fix move file to diffrent partition on Windows

This commit is contained in:
uma0317 2019-11-15 11:52:51 +09:00
parent aa1ef39da3
commit 0756145caf

View file

@ -623,26 +623,71 @@ impl Shell for FilesystemShell {
} }
if entry.is_file() { if entry.is_file() {
match std::fs::rename(&entry, &destination) { #[cfg(not(windows))]
Err(e) => { {
return Err(ShellError::labeled_error( match std::fs::rename(&entry, &destination) {
format!( Err(e) => {
"Rename {:?} to {:?} aborted. {:}", return Err(ShellError::labeled_error(
entry_file_name, format!(
destination_file_name, "Rename {:?} to {:?} aborted. {:}",
e.to_string(), entry_file_name,
), destination_file_name,
format!( e.to_string(),
"Rename {:?} to {:?} aborted. {:}", ),
entry_file_name, format!(
destination_file_name, "Rename {:?} to {:?} aborted. {:}",
e.to_string(), entry_file_name,
), destination_file_name,
name_tag, e.to_string(),
)); ),
} name_tag,
Ok(o) => o, ));
}; }
Ok(o) => o,
};
}
#[cfg(windows)]
{
match std::fs::copy(&entry, &destination) {
Err(e) => {
return Err(ShellError::labeled_error(
format!(
"Rename {:?} to {:?} aborted. {:}",
entry_file_name,
destination_file_name,
e.to_string(),
),
format!(
"Rename {:?} to {:?} aborted. {:}",
entry_file_name,
destination_file_name,
e.to_string(),
),
name_tag,
));
}
Ok(_) => match std::fs::remove_file(&entry) {
Err(e) => {
return Err(ShellError::labeled_error(
format!(
"Rename {:?} to {:?} aborted. {:}",
entry_file_name,
destination_file_name,
e.to_string(),
),
format!(
"Rename {:?} to {:?} aborted. {:}",
entry_file_name,
destination_file_name,
e.to_string(),
),
name_tag,
));
}
Ok(o) => o,
},
};
}
} }
if entry.is_dir() { if entry.is_dir() {
@ -745,26 +790,45 @@ impl Shell for FilesystemShell {
} }
if src.is_file() { if src.is_file() {
match std::fs::rename(src, dst) { match std::fs::copy(&src, &dst) {
Err(e) => { Err(e) => {
return Err(ShellError::labeled_error( return Err(ShellError::labeled_error(
format!( format!(
"Rename {:?} to {:?} aborted. {:}", "Rename {:?} to {:?} aborted. {:}",
entry_file_name, src,
destination_file_name, destination_file_name,
e.to_string(), e.to_string(),
), ),
format!( format!(
"Rename {:?} to {:?} aborted. {:}", "Rename {:?} to {:?} aborted. {:}",
entry_file_name, src,
destination_file_name, destination_file_name,
e.to_string(), e.to_string(),
), ),
name_tag, name_tag,
)); ));
} }
Ok(o) => o, Ok(_) => match std::fs::remove_file(&src) {
} Err(e) => {
return Err(ShellError::labeled_error(
format!(
"Rename {:?} to {:?} aborted. {:}",
entry_file_name,
destination_file_name,
e.to_string(),
),
format!(
"Rename {:?} to {:?} aborted. {:}",
entry_file_name,
destination_file_name,
e.to_string(),
),
name_tag,
));
}
Ok(o) => o,
},
};
} }
} }
@ -824,26 +888,71 @@ impl Shell for FilesystemShell {
to.push(entry_file_name); to.push(entry_file_name);
if entry.is_file() { if entry.is_file() {
match std::fs::rename(&entry, &to) { #[cfg(not(windows))]
Err(e) => { {
return Err(ShellError::labeled_error( match std::fs::rename(&entry, &to) {
format!( Err(e) => {
"Rename {:?} to {:?} aborted. {:}", return Err(ShellError::labeled_error(
entry_file_name, format!(
destination_file_name, "Rename {:?} to {:?} aborted. {:}",
e.to_string(), entry_file_name,
), destination_file_name,
format!( e.to_string(),
"Rename {:?} to {:?} aborted. {:}", ),
entry_file_name, format!(
destination_file_name, "Rename {:?} to {:?} aborted. {:}",
e.to_string(), entry_file_name,
), destination_file_name,
name_tag, e.to_string(),
)); ),
} name_tag,
Ok(o) => o, ));
}; }
Ok(o) => o,
};
}
#[cfg(windows)]
{
match std::fs::copy(&entry, &to) {
Err(e) => {
return Err(ShellError::labeled_error(
format!(
"Rename {:?} to {:?} aborted. {:}",
entry_file_name,
destination_file_name,
e.to_string(),
),
format!(
"Rename {:?} to {:?} aborted. {:}",
entry_file_name,
destination_file_name,
e.to_string(),
),
name_tag,
));
}
Ok(_) => match std::fs::remove_file(&entry) {
Err(e) => {
return Err(ShellError::labeled_error(
format!(
"Remove {:?} to {:?} aborted. {:}",
entry_file_name,
destination_file_name,
e.to_string(),
),
format!(
"Remove {:?} to {:?} aborted. {:}",
entry_file_name,
destination_file_name,
e.to_string(),
),
name_tag,
));
}
Ok(o) => o,
},
};
}
} }
} }
} }