pathinfo.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #ifndef IGL_PATHINFO_H
  2. #define IGL_PATHINFO_H
  3. #include <string>
  4. namespace igl
  5. {
  6. //// Decided not to use these
  7. //const int PATHINFO_DIRNAME 01
  8. //const int PATHINFO_BASENAME 02
  9. //const int PATHINFO_EXTENSION 04
  10. //const int PATHINFO_FILENAME 08
  11. // Function like PHP's pathinfo
  12. // returns information about path
  13. // Input:
  14. // path string containing input path
  15. // Outputs:
  16. // dirname string containing dirname (see dirname.h)
  17. // basename string containing basename (see basename.h)
  18. // extension string containing extension (characters after last '.')
  19. // filename string containing extension (characters of basename before last
  20. // '.')
  21. //
  22. // See also: basename, dirname
  23. inline void pathinfo(
  24. const std::string & path,
  25. std::string & dirname,
  26. std::string & basename,
  27. std::string & extension,
  28. std::string & filename);
  29. }
  30. // Implementation
  31. #include "dirname.h"
  32. #include "basename.h"
  33. // Verbose should be removed once everythings working correctly
  34. #include "verbose.h"
  35. inline void igl::pathinfo(
  36. const std::string & path,
  37. std::string & dirname,
  38. std::string & basename,
  39. std::string & extension,
  40. std::string & filename)
  41. {
  42. dirname = igl::dirname(path);
  43. basename = igl::basename(path);
  44. std::string::reverse_iterator last_dot =
  45. std::find(
  46. basename.rbegin(),
  47. basename.rend(), '.');
  48. // Was a dot found?
  49. if(last_dot == basename.rend())
  50. {
  51. // filename is same as basename
  52. filename = basename;
  53. // no extension
  54. extension = "";
  55. }else
  56. {
  57. // extension is substring of basename
  58. extension = std::string(last_dot.base(),basename.end());
  59. // filename is substring of basename
  60. filename = std::string(basename.begin(),last_dot.base()-1);
  61. }
  62. }
  63. #endif