10.8. Deleting or Renaming a File
Problem
You have to remove or rename a file, and you want to do it portably, i.e., without using OS-specific APIs.
Solution
The Standard C functions remove and rename, in <cstdio>,
will do this. See Example 10-11 for a
brief demonstration of them.
Example 10-11. Removing a file
#include <iostream>
#include <cstdio>
#include <cerrno>
using namespace std;
int main(int argc, char** argv) {
if (argc != 2) {
cerr << "You must supply a file name to remove." << endl;
return(EXIT_FAILURE);
}
if (remove(argv[1]) == -1) { // remove() returns -1 on error
cerr << "Error: " << strerror(errno) << endl;
return(EXIT_FAILURE);
}
else {
cout << "File '" << argv[1] << "' removed." << endl;
}
}Discussion
These system calls are easy to use: just call one or the other with the filename you
want to delete or rename. If something goes wrong, the return value is non-zero and
errno is set to the appropriate error number. You can
use strerror or perror (both declared in <cstdio>)
to print out the implementation-defined error message.
To rename a file, you can replace the remove call
in Example 10-11 with the following
code:
if (rename(argv[1], argv[2])) {
cerr << "Error: " << strerror(errno) << endl;
return(EXIT_FAILURE);
}The Boost Filesystem library also provides the ability to remove or rename a file. Example 10-12 shows a short program for removing a file (or directory, but see the discussion after the example).
Example 10-12. Removing a file with Boost
#include <iostream> ...