0

相対ディレクトリとファイル パス (両方) を直接またはフル パスから取得する方法を探していました。満足のいく答えが見つからないようです...そして私はたくさんググりました。

問題は、FTP でファイルをアップロードする必要があり、ftp 要求を作成するために「Hostftp:port/」+「Directory/subdirectory」という形式が必要なことです。

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

どうやってするの???

4

1 に答える 1

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(@"\", "/"));

ftpパス:

myftp:8008/Users 
myftp:8008/Users/Data 
myftp:8008/Users/Data/Anagraphics 
myftp:8008/Work 

パスのリストから共通ファイルパスを見つけるには、このSO質問の回答の1つを使用しました

于 2013-09-05T10:34:11.490 に答える