【问题标题】:Relative path in c#c#中的相对路径
【发布时间】:2013-09-05 10:12:23
【问题描述】:

我正在寻找一种直接或从完整路径获取相对目录和文件路径(两者)的方法。看来我找不到令人满意的答案......我搜索了很多。

问题是我需要在 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

怎么做???

【问题讨论】:

  • 不是很清楚你在问什么。请编辑您的问题以提供更清晰的示例,并改进您的格式以便于阅读和理解

标签: c# ftp relative-path absolute-path directoryinfo


【解决方案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 的答案之一

【讨论】:

    猜你喜欢
    • 2011-06-15
    • 1970-01-01
    • 2015-12-02
    • 2015-03-26
    • 2018-08-19
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    相关资源
    最近更新 更多