I'd write a loop. Split the path into components, and "walk it", i.e. starting at the beginning, check to see if it exists. If it does, enter it and continue. If it does not, create it, enter it and continue. For bonus points, detect if a component exists, but is a file rather than an a directory.