C# 在C中格式化Linux路径#
因此,我正在使用C#中的WinSCP库制作一个文件浏览器。来自远程服务器的文件和文件夹被加载到ListView中,我在ListView\u双击事件上有一个事件,该事件将转到并获取该文件夹的文件。然而,我的问题是,从WinSCP返回的“CurrentPath”是这样构建的; “/eddata/T”。现在,如果用户返回目录,则返回的路径是“/eddata/T/。/”。如果用户随后进入另一个名为“Bob”的文件夹,则路径如下所示;“/eddata/T/。/Bob” 我需要一种方法,以便以用户友好的方式显示当前路径。因此,当用户在目录中时;“/eddata/T/”并且他们上升了一个级别,标签应该告诉他们他们在;“/eddata/” 这是我的尝试,但没有达到预期效果,它不会处理用户同时返回两个目录的事件C# 在C中格式化Linux路径#,c#,C#,因此,我正在使用C#中的WinSCP库制作一个文件浏览器。来自远程服务器的文件和文件夹被加载到ListView中,我在ListView\u双击事件上有一个事件,该事件将转到并获取该文件夹的文件。然而,我的问题是,从WinSCP返回的“CurrentPath”是这样构建的; “/eddata/T”。现在,如果用户返回目录,则返回的路径是“/eddata/T/。/”。如果用户随后进入另一个名为“Bob”的文件夹,则路径如下所示;“/eddata/T/。/Bob” 我需要一种方法,以便以用户友好的方式
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))。替换(“\”,“/”)。代码>将正确转义空格。