private string CreatePath(string pathCreate, string root, bool returnFull = false)
        {
            if (FileSystemObject.IsPathSystemRooted(pathCreate))
            {
                var path = FileSystemObject.BluntStart(pathCreate.ForwardSlashes(), root);

                return(this.CreatePath(path, root, returnFull));
            }
            else
            {
                string   path;
                string[] parts;
                Folder   parentFolder = null;

                if (returnFull)
                {
                    path = PathCombine(root, pathCreate, true);

                    if (path.StartsWith(this.Root))
                    {
                        parts = FileSystemObject.BluntStart(path, this.Root).SplitCombine('/');
                    }
                    else if (path.StartsWith(this.ServicesRoot))
                    {
                        parts = FileSystemObject.BluntStart(path, this.ServicesRoot).SplitCombine('/');
                    }
                    else if (path.StartsWith(this.ProjectRoot))
                    {
                        parts = FileSystemObject.BluntStart(path, this.ProjectRoot).SplitCombine('/');
                    }
                    else
                    {
                        e.Throw <InvalidOperationException>("Unrecognized path prefix");
                        parts = null;
                    }
                }
                else
                {
                    path = PathCombine(root, pathCreate, true);

                    if (path.StartsWith(this.Root))
                    {
                        path  = FileSystemObject.BluntStart(path, this.Root);
                        parts = path.SplitCombine('/');
                    }
                    else if (path.StartsWith(this.ServicesRoot))
                    {
                        path  = FileSystemObject.BluntStart(path, this.ServicesRoot);
                        parts = path.SplitCombine('/');
                    }
                    else if (path.StartsWith(this.ProjectRoot))
                    {
                        path  = FileSystemObject.BluntStart(path, this.ProjectRoot);
                        parts = path.SplitCombine('/');
                    }
                    else
                    {
                        e.Throw <InvalidOperationException>("Unrecognized path prefix");
                        parts = null;
                    }
                }

                foreach (var part in parts)
                {
                    if (this.Index.ContainsKey(part))
                    {
                        parentFolder = (Folder)this.Index[part];
                    }
                    else
                    {
                        var newFolder = new Folder(this, PathCombine(this.Root, part, true));

                        parentFolder.Folders.Add(newFolder);
                        parentFolder = newFolder;
                    }
                }

                var debug = false;

                if (debug)
                {
                    var folders = this.GetAllFolders();
                }

                return(path);
            }
        }