C# 在C中格式化Linux路径#

C# 在C中格式化Linux路径#,c#,C#,因此,我正在使用C#中的WinSCP库制作一个文件浏览器。来自远程服务器的文件和文件夹被加载到ListView中,我在ListView\u双击事件上有一个事件,该事件将转到并获取该文件夹的文件。然而,我的问题是,从WinSCP返回的“CurrentPath”是这样构建的; “/eddata/T”。现在,如果用户返回目录,则返回的路径是“/eddata/T/。/”。如果用户随后进入另一个名为“Bob”的文件夹,则路径如下所示;“/eddata/T/。/Bob” 我需要一种方法,以便以用户友好的方式

因此,我正在使用C#中的WinSCP库制作一个文件浏览器。来自远程服务器的文件和文件夹被加载到ListView中,我在ListView\u双击事件上有一个事件,该事件将转到并获取该文件夹的文件。然而,我的问题是,从WinSCP返回的“CurrentPath”是这样构建的; “/eddata/T”。现在,如果用户返回目录,则返回的路径是“/eddata/T/。/”。如果用户随后进入另一个名为“Bob”的文件夹,则路径如下所示;“/eddata/T/。/Bob”

我需要一种方法,以便以用户友好的方式显示当前路径。因此,当用户在目录中时;“/eddata/T/”并且他们上升了一个级别,标签应该告诉他们他们在;“/eddata/”

这是我的尝试,但没有达到预期效果,它不会处理用户同时返回两个目录的事件

private string FormatPathString(string input)
{

    String working = input;

    bool replacement = true;
    while (replacement)
    {
        string[] splits = working.Split('/');
        splits = splits.AsEnumerable().Where(x => x != String.Empty).ToArray();

        int? found_index = null;

        for (int i = splits.Count() - 1; i > 0; i--)
        {
            if (splits[i] == "..")
            {
                found_index = i;
                break;
            }
        }

        if (found_index.HasValue)
        {
            replacement = true;
            splits = splits.Where((val, idx) => (idx != found_index) && (idx != found_index - 1)).ToArray();
            working = String.Join("/", splits);
        }
        else
        {
            replacement = false;
        }

    }

    return working;
}

您可以使用Path类

string pathWithDots= "/eddata/T/../Bob";

string pathWithoutDots = Path.GetFullPath(pathWithDots); // Result: c:\eddata\Bob
但是,Path类假定您使用的是windows路径,并将C:添加到反斜杠中,因此您需要在开始时删除C:并将所有反斜杠替换为正斜杠

string pathNx = pathWithoutDots.Substring(2).Replace("\\", "/"); // Result: /eddata/Bob

您可以使用Path类

string pathWithDots= "/eddata/T/../Bob";

string pathWithoutDots = Path.GetFullPath(pathWithDots); // Result: c:\eddata\Bob
但是,Path类假定您使用的是windows路径,并将C:添加到反斜杠中,因此您需要在开始时删除C:并将所有反斜杠替换为正斜杠

string pathNx = pathWithoutDots.Substring(2).Replace("\\", "/"); // Result: /eddata/Bob

我想补充一点,您的解决方案存在包含空格的路径问题。他说,他正在使用它创建一个WinSCP客户端浏览器,在该浏览器中,路径名可以在本地和远程存在多种可能。您可能想考虑提供一个更完整的解决方案。<代码> String PATNX=(PATIONOUTDOSP.String(2))。替换(“\”,“/”)。代码>将正确转义空格。请允许我添加您的解决方案在包含空格的路径上存在问题。他说,他正在使用它创建一个WinSCP客户端浏览器,在该浏览器中,路径名可以在本地和远程存在多种可能。您可能想考虑提供一个更完整的解决方案。<代码> String PATNX=(PATIONOUTDOSP.String(2))。替换(“\”,“/”)。代码>将正确转义空格。