C# 如何将路径拆分为路径集

C# 如何将路径拆分为路径集,c#,.net,arrays,string,C#,.net,Arrays,String,我有一个路径变量,如“Customer\\Calls\\A1\\A2\\A3\\A4”。我希望将其拆分为一个数组,如 'Customer' 'Customer\Calls' 'Customer\Calls\A1' 'Customer\Calls\A1\A2' 'Customer\Calls\A1\A2\A3' 'Customer\Calls\A1\A2\A3\A4' 如果我们喜欢 string[] directories = currentFolderPath.Split(Path.Dire

我有一个路径变量,如“Customer\\Calls\\A1\\A2\\A3\\A4”。我希望将其拆分为一个数组,如

'Customer'
'Customer\Calls'
'Customer\Calls\A1'
'Customer\Calls\A1\A2'
'Customer\Calls\A1\A2\A3'
'Customer\Calls\A1\A2\A3\A4'
如果我们喜欢

 string[] directories = currentFolderPath.Split(Path.DirectorySeparatorChar);
我们将获得一组文件夹,但它不会进入上述结构


有人能建议一种更好的方法吗

在找到根目录之前获取父目录

如果这是一条绝对路径

private static IEnumerable<string> SplitPath(string path){
    do{
        yield return path;
        path=Path.GetDirectoryName(path);
    } while(path!=null);
}
私有静态IEnumerable拆分路径(字符串路径){
做{
收益返回路径;
path=path.GetDirectoryName(路径);
}while(路径!=null);
}
如果是相对路径

private static IEnumerable<string> SplitRelativePath(string path){
    do{
        yield return path;
        var lastIndex=path.LastIndexOf('\\');
        if(lastIndex==-1)
            yield break;
        path=path.Substring(0, lastIndex);
    } while(path!=null);
}

//usage
SplitRelativePath(@"Customer\Calls\A1\A2\A3\A4");


/* result:
C:\Customer\Calls\A1\A2\A3\A4 
C:\Customer\Calls\A1\A2\A3 
C:\Customer\Calls\A1\A2 
C:\Customer\Calls\A1 
C:\Customer\Calls 
C:\Customer 
C:\ *
私有静态IEnumerable SplitRelativePath(字符串路径){
做{
收益返回路径;
var lastIndex=path.LastIndexOf('\\');
如果(lastIndex==-1)
屈服断裂;
path=path.Substring(0,lastIndex);
}while(路径!=null);
}
//用法
SplitRelativePath(@“Customer\Calls\A1\A2\A3\A4”);
/*结果:
C:\Customer\Calls\A1\A2\A3\A4
C:\Customer\Calls\A1\A2\A3
C:\Customer\Calls\A1\A2
C:\Customer\Calls\A1
C:\Customer\Calls
C:\客户
C:\*

获取父目录,直到找到根目录

如果这是一条绝对路径

private static IEnumerable<string> SplitPath(string path){
    do{
        yield return path;
        path=Path.GetDirectoryName(path);
    } while(path!=null);
}
私有静态IEnumerable拆分路径(字符串路径){
做{
收益返回路径;
path=path.GetDirectoryName(路径);
}while(路径!=null);
}
如果是相对路径

private static IEnumerable<string> SplitRelativePath(string path){
    do{
        yield return path;
        var lastIndex=path.LastIndexOf('\\');
        if(lastIndex==-1)
            yield break;
        path=path.Substring(0, lastIndex);
    } while(path!=null);
}

//usage
SplitRelativePath(@"Customer\Calls\A1\A2\A3\A4");


/* result:
C:\Customer\Calls\A1\A2\A3\A4 
C:\Customer\Calls\A1\A2\A3 
C:\Customer\Calls\A1\A2 
C:\Customer\Calls\A1 
C:\Customer\Calls 
C:\Customer 
C:\ *
私有静态IEnumerable SplitRelativePath(字符串路径){
做{
收益返回路径;
var lastIndex=path.LastIndexOf('\\');
如果(lastIndex==-1)
屈服断裂;
path=path.Substring(0,lastIndex);
}while(路径!=null);
}
//用法
SplitRelativePath(@“Customer\Calls\A1\A2\A3\A4”);
/*结果:
C:\Customer\Calls\A1\A2\A3\A4
C:\Customer\Calls\A1\A2\A3
C:\Customer\Calls\A1\A2
C:\Customer\Calls\A1
C:\Customer\Calls
C:\客户
C:\*

这在你的帖子中并不明显,但如果你需要对数组中的每个项目做些什么,我可能会采取以下方法:

string path = string.Empty;
"Customer\\Calls\\A1\\A2\\A3\\A4".Split(new Char[] { '\\' }).ToList().ForEach(
        part => {
            path = Path.Combine(path, part);
            // Do stuff!
        }
);

这在你的帖子中并不明显,但如果你需要对数组中的每个项目做些什么,我可能会采取以下方法:

string path = string.Empty;
"Customer\\Calls\\A1\\A2\\A3\\A4".Split(new Char[] { '\\' }).ToList().ForEach(
        part => {
            path = Path.Combine(path, part);
            // Do stuff!
        }
);
//简单易行,试试这个
字符串路径=@“Customer\Calls\A1\A2\A3\A4”;
字符串[]pathArr=path.Split('\\');
列表=新列表();
for(int i=0;i0)
{
temp=list[i-1].ToString()++@“\”+temp;
}
列表。添加(临时);
}
//简单易行,试试这个
字符串路径=@“Customer\Calls\A1\A2\A3\A4”;
字符串[]pathArr=path.Split('\\');
列表=新列表();
for(int i=0;i0)
{
temp=list[i-1].ToString()++@“\”+temp;
}
列表。添加(临时);
}
string path=“客户\\呼叫\\A1\\A2\\A3\\A4”;
var pathArr=path.Split(新字符串[]{“\\”},StringSplitOptions.None);
var pathList=新列表();
while(pathArr.Length!=pathList.Count)
{
字符串modifiedPath=“”;
for(int i=0;i
string path=“客户\\呼叫\\A1\\A2\\A3\\A4”;
var pathArr=path.Split(新字符串[]{“\\”},StringSplitOptions.None);
var pathList=新列表();
while(pathArr.Length!=pathList.Count)
{
字符串modifiedPath=“”;
for(int i=0;i
展示你的努力?问题在哪里?表现出你的努力?问题出在哪里?我的路径类似于Customer\\Calls\\A1\\A2\\A3\\A4。因此,在这种情况下,它将失败。我的路径类似于Customer\\Calls\\A1\\A2\\A3\\A4。因此,在这种情况下,它将失败