Commit 960cc104dbc2c2a83fe16137d6928b8fbcb14b59
1 parent
cf667f28
Adding error messages on failed conversion
Showing
1 changed file
with
31 additions
and
8 deletions
include/CLI/Validators.hpp
| ... | ... | @@ -4,6 +4,7 @@ |
| 4 | 4 | // file LICENSE or https://github.com/henryiii/CLI11 for details. |
| 5 | 5 | |
| 6 | 6 | #include <string> |
| 7 | +#include <iostream> | |
| 7 | 8 | |
| 8 | 9 | |
| 9 | 10 | // C standard library |
| ... | ... | @@ -17,25 +18,47 @@ namespace CLI { |
| 17 | 18 | |
| 18 | 19 | /// Check for an existing file |
| 19 | 20 | bool ExistingFile(std::string filename) { |
| 20 | -// std::fstream f(name.c_str()); | |
| 21 | -// return f.good(); | |
| 22 | -// Fastest way according to http://stackoverflow.com/questions/12774207/fastest-way-to-check-if-a-file-exist-using-standard-c-c11-c | |
| 23 | 21 | struct stat buffer; |
| 24 | - return (stat(filename.c_str(), &buffer) == 0); | |
| 22 | + bool exist = stat(filename.c_str(), &buffer) == 0; | |
| 23 | + bool is_dir = buffer.st_mode & S_IFDIR; | |
| 24 | + if(!exist) { | |
| 25 | + std::cerr << "File does not exist: " << filename << std::endl; | |
| 26 | + return false; | |
| 27 | + } else if (is_dir) { | |
| 28 | + std::cerr << "File is actually a directory: " << filename << std::endl; | |
| 29 | + return false; | |
| 30 | + } else { | |
| 31 | + return true; | |
| 32 | + } | |
| 25 | 33 | } |
| 26 | 34 | |
| 27 | 35 | /// Check for an existing directory |
| 28 | 36 | bool ExistingDirectory(std::string filename) { |
| 29 | 37 | struct stat buffer; |
| 30 | - if(stat(filename.c_str(), &buffer) == 0 && (buffer.st_mode & S_IFDIR) ) | |
| 38 | + bool exist = stat(filename.c_str(), &buffer) == 0; | |
| 39 | + bool is_dir = buffer.st_mode & S_IFDIR; | |
| 40 | + if(!exist) { | |
| 41 | + std::cerr << "Directory does not exist: " << filename << std::endl; | |
| 42 | + return false; | |
| 43 | + } else if (is_dir) { | |
| 44 | + return true; | |
| 45 | + } else { | |
| 46 | + std::cerr << "Directory is actually a file: " << filename << std::endl; | |
| 31 | 47 | return true; |
| 32 | - return false; | |
| 48 | + } | |
| 33 | 49 | } |
| 34 | 50 | |
| 51 | + | |
| 35 | 52 | /// Check for a non-existing path |
| 36 | 53 | bool NonexistentPath(std::string filename) { |
| 37 | - struct stat buffer; | |
| 38 | - return stat(filename.c_str(), &buffer) != 0; | |
| 54 | + struct stat buffer; | |
| 55 | + bool exist = stat(filename.c_str(), &buffer) == 0; | |
| 56 | + if(!exist) { | |
| 57 | + return true; | |
| 58 | + } else { | |
| 59 | + std::cerr << "Path exists: " << filename << std::endl; | |
| 60 | + return false; | |
| 61 | + } | |
| 39 | 62 | } |
| 40 | 63 | |
| 41 | 64 | ... | ... |