为什么解析路径名字符串不起作用?

时间:2014-12-18 15:22:00

标签: c# .net winforms

我有这段代码:

List<string> dirParts = new List<string>();
int index = 0;
for (int i = 0; i < dirName.Length; i++)
{
    index = dirName.IndexOf("/");
    string dironly = dirName.Substring(index, dirName.Length - index);
    dirParts.Add(dironly);
}

dirName例如包含d/1/2/3/4/5

所以我需要在列表dirParts中最终得到索引0 d,索引1 d/1,索引2 d/1/2,索引3 d/1/2/3,索引4 d/1/2/3/4,索引5 d/1/2/3/4/5

因此,当我查看列表时,它应该如下所示:

d
d/1
d/1/2
d/1/2/3
d/1/2/3/4
d/1/2/3/4/5

4 个答案:

答案 0 :(得分:3)

可能的实施:

  List<string> dirParts = new List<string>();

  int index = -1;

  while (true) {
    index = dirName.IndexOf("/", index + 1);

    if (index < 0) {
      dirParts.Add(dirName);

      break;
    }
    else
      dirParts.Add(dirName.Substring(0, index));
  }

答案 1 :(得分:0)

除了这种路径操作最好留给库之外,为了避免你的代码在奇怪的特殊目录名上中断,你的代码就像它一样工作,因为你每次看起来都是相同的“/".

你应该在最后一个之后搜索:

index = dirName.IndexOf("/", index+1);

答案 2 :(得分:0)

如果是目录,我想亲自使用Path库。唯一的问题是在目录名中使用/而不是\,因此您必须在插入之前调用.Replace

var orig = "d/1/2/3/4/5"; // Original string
List<String> dirParts = new List<String>(new[]{ orig }); // start out with list of original

// Get the directory below this one. (drop off last folder)
String part = Path.GetDirectoryName(orig);
while (!String.IsNullOrEmpty(part))
{
    // add it to the first entry in the list
    dirParts.Insert(0, part.Replace('\\','/'));
    // get the next parent folder.
    part = Path.GetDirectoryName(part);
}

/* dirParts = [ "d", "d/1", "d/1/2", ... ] */

但是,如果你只是在寻找简单而又脏的LINQ方法:

var orig = "d/1/2/3/4/5";
String[] parts = orig.Split('/');
var dirParts = Enumerable.Range(1, parts.Length)
  .Select (e => String.Join("/", parts.Take(e)));

答案 3 :(得分:0)

如果你真的想这样做:

for (int i = 0; i < dirName.Length; i++) {
    index = dirName.IndexOf("/", index);

    if (index == -1)
        i = index = dirName.Length; //last one

    dirParts.Add(dirName.Substring(0, index++));
}