public string GetPathRelativeTo(string basePath) { var dir = new DirectoryInfo(basePath); var baseFs = new FolderStack(dir); var fileFs = new FolderStack(new FileInfo(FullPath).Directory); var kickedStack = new Stack<DirectoryInfo>(); string temp = string.Empty; while (baseFs.CurrentDirectory.FullName != fileFs.CurrentDirectory.FullName) { if (baseFs.CurrentDirectory.FullName.Length > fileFs.CurrentDirectory.FullName.Length) { baseFs.Pop(); temp += "../"; } else kickedStack.Push(fileFs.Pop()); } while (kickedStack.Any()) { temp += kickedStack.Pop().Name + "/"; } temp += new FileInfo(FullPath).Name; return temp; }
private bool ProcessDirectory(FolderStack fs, string curDir) { if (curDir == "..") return fs.Pop() != null; return fs.Push(curDir); }