pathinfo.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. void pathinfo(
  22. const std::string & path,
  23. std::string & dirname,
  24. std::string & basename,
  25. std::string & extension,
  26. std::string & filename);
  27. }
  28. // Implementation
  29. #include "dirname.h"
  30. #include "basename.h"
  31. // Verbose should be removed once everythings working correctly
  32. #include "verbose.h"
  33. void igl::pathinfo(
  34. const std::string & path,
  35. std::string & dirname,
  36. std::string & basename,
  37. std::string & extension,
  38. std::string & filename)
  39. {
  40. dirname = igl::dirname(path);
  41. basename = igl::basename(path);
  42. std::string::reverse_iterator last_dot =
  43. std::find(
  44. basename.rbegin(),
  45. basename.rend(), '.');
  46. // Was a dot found?
  47. if(last_dot == basename.rend())
  48. {
  49. // filename is same as basename
  50. filename = basename;
  51. // no extension
  52. extension = "";
  53. }else
  54. {
  55. // extension is substring of basename
  56. extension = std::string(last_dot.base(),basename.end());
  57. // filename is substring of basename
  58. filename = std::string(basename.begin(),last_dot.base()-1);
  59. }
  60. }
  61. #endif