This is a pretty awkward construction.  I know the goal is for the file handles to have no api themselves, but could they not at least be seen as a source for their own path strings?  Or is that the beginnings of the slippery slope?  If not, then perhaps a base_path_string and a dir_path_string?  No, wait, basename and dir already return strings.  So path_string is redundant here.