我一直在寻找一种方法来直接或从完整路径获取相对目录和文件路径(两者)。好像我找不到令人满意的答案......我用Google搜索了很多。
问题是我需要在FTP上传文件,我需要格式“Hostftp:port /”+“Directory / subdirectory”来创建ftp请求
实施例
myftp:8008/Users
myftp:8008/Users/Data
myftp:8008/Users/Data/Anagraphics
myftp:8008/Work
等等。
我从计算机中选择文件,因此它们就像
C:\users\MyPc\UsersData\Users
C:\users\MyPc\UsersData\Users\Data
C:\users\MyPc\UsersData\Users\Data\Anagraphics
C:\users\MyPc\UsersData\Work
我希望它们列为
Users
Users\Data
Users\Data\Anagraphics
Work
所以我可以连接字符串并生成
myftp:8008/Users
myftp:8008/Users/Data
myftp:8008/Users/Data/Anagraphics
myftp:8008/Work
怎么做???
答案 0 :(得分:1)
List<string> paths = new List<string>()
{
@"C:\users\MyPc\UsersData\Users",
@"C:\users\MyPc\UsersData\Users\Data",
@"C:\users\MyPc\UsersData\Users\Data\Anagraphics",
@"C:\users\MyPc\UsersData\Work"
};
var MatchingChars =
from len in Enumerable.Range(0, paths.Min(s => s.Length)).Reverse()
let possibleMatch = paths.First().Substring(0, len)
where paths.All(f => f.StartsWith(possibleMatch))
select possibleMatch;
var LongestDir = Path.GetDirectoryName(MatchingChars.First());
var ftpPaths = paths.Select(p=>Path.Combine("myftp:8008",p.Substring(LongestDir.Length +1)).Replace(@"\", "/"));
ftpPaths:
myftp:8008/Users
myftp:8008/Users/Data
myftp:8008/Users/Data/Anagraphics
myftp:8008/Work
从我使用this SO Question
的答案之一的路径列表中查找公共文件路径