为什么解析路径名字符串不起作用
本文关键字:字符串 不起作用 路径名 为什么 | 更新日期: 2023-09-27 18:34:40
我有这个代码:
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
可能的实现:
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));
}
除了这种路径操作最好留给库,以免您的代码在奇怪的异常目录名称上中断之外,您的代码会像它一样工作,因为您每次都查找相同的"/"。
您应该在最后一个之后搜索:
index = dirName.IndexOf("/", index+1);
如果你真的想这样做:
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++));
}
如果它是一个目录,我喜欢亲自使用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)));