Add rename_file/2 predicate to the files library

This commit is contained in:
Paulo Moura
2021-05-18 18:08:30 +01:00
parent 0eeae24049
commit 58555d598b
3 changed files with 22 additions and 0 deletions

View File

@@ -175,6 +175,7 @@ pub(crate) enum SystemClauseType {
MakeDirectory, MakeDirectory,
MakeDirectoryPath, MakeDirectoryPath,
DeleteFile, DeleteFile,
RenameFile,
DeleteDirectory, DeleteDirectory,
WorkingDirectory, WorkingDirectory,
PathCanonical, PathCanonical,
@@ -338,6 +339,7 @@ impl SystemClauseType {
&SystemClauseType::MakeDirectory => clause_name!("$make_directory"), &SystemClauseType::MakeDirectory => clause_name!("$make_directory"),
&SystemClauseType::MakeDirectoryPath => clause_name!("$make_directory_path"), &SystemClauseType::MakeDirectoryPath => clause_name!("$make_directory_path"),
&SystemClauseType::DeleteFile => clause_name!("$delete_file"), &SystemClauseType::DeleteFile => clause_name!("$delete_file"),
&SystemClauseType::RenameFile => clause_name!("$rename_file"),
&SystemClauseType::DeleteDirectory => clause_name!("$delete_directory"), &SystemClauseType::DeleteDirectory => clause_name!("$delete_directory"),
&SystemClauseType::WorkingDirectory => clause_name!("$working_directory"), &SystemClauseType::WorkingDirectory => clause_name!("$working_directory"),
&SystemClauseType::PathCanonical => clause_name!("$path_canonical"), &SystemClauseType::PathCanonical => clause_name!("$path_canonical"),
@@ -749,6 +751,7 @@ impl SystemClauseType {
("$make_directory", 1) => Some(SystemClauseType::MakeDirectory), ("$make_directory", 1) => Some(SystemClauseType::MakeDirectory),
("$make_directory_path", 1) => Some(SystemClauseType::MakeDirectoryPath), ("$make_directory_path", 1) => Some(SystemClauseType::MakeDirectoryPath),
("$delete_file", 1) => Some(SystemClauseType::DeleteFile), ("$delete_file", 1) => Some(SystemClauseType::DeleteFile),
("$rename_file", 2) => Some(SystemClauseType::RenameFile),
("$delete_directory", 1) => Some(SystemClauseType::DeleteDirectory), ("$delete_directory", 1) => Some(SystemClauseType::DeleteDirectory),
("$working_directory", 2) => Some(SystemClauseType::WorkingDirectory), ("$working_directory", 2) => Some(SystemClauseType::WorkingDirectory),
("$path_canonical", 2) => Some(SystemClauseType::PathCanonical), ("$path_canonical", 2) => Some(SystemClauseType::PathCanonical),

View File

@@ -51,6 +51,7 @@
file_exists/1, file_exists/1,
directory_exists/1, directory_exists/1,
delete_file/1, delete_file/1,
rename_file/2,
delete_directory/1, delete_directory/1,
make_directory/1, make_directory/1,
make_directory_path/1, make_directory_path/1,
@@ -101,6 +102,12 @@ delete_file(File) :-
list_of_chars(File), list_of_chars(File),
'$delete_file'(File). '$delete_file'(File).
rename_file(File, Renamed) :-
file_must_exist(File, rename_file/2),
list_of_chars(File),
list_of_chars(Renamed),
'$rename_file'(File, Renamed).
delete_directory(Directory) :- delete_directory(Directory) :-
directory_must_exist(Directory, delete_directory/1), directory_must_exist(Directory, delete_directory/1),
list_of_chars(Directory), list_of_chars(Directory),

View File

@@ -900,6 +900,18 @@ impl MachineState {
} }
} }
} }
&SystemClauseType::RenameFile => {
let file = self.heap_pstr_iter(self[temp_v!(1)]).to_string();
let renamed = self.heap_pstr_iter(self[temp_v!(2)]).to_string();
match fs::rename(file, renamed) {
Ok(_) => {}
_ => {
self.fail = true;
return Ok(());
}
}
}
&SystemClauseType::DeleteDirectory => { &SystemClauseType::DeleteDirectory => {
let directory = self.heap_pstr_iter(self[temp_v!(1)]).to_string(); let directory = self.heap_pstr_iter(self[temp_v!(1)]).to_string();