C#过滤路径的差异

时间:2017-04-11 11:25:25

标签: c# substring

DirectoryPath = C:\ Pics

filePath = C:\ Pics \ Dogs \ dog.PNG

newPath应为: Dogs \ dog.PNG

如何获得newPath? 我的代码段不正确

string directoryPath = "C:\\Pics";
string filePath = "C:\\Pics\\Dogs\\dog.PNG";

if (!directoryPath.EndsWith("\\"))
   directoryPath = directoryPath + "\\";

string newPath = filePath.Substring(filePath.LastIndexOf(directoryPath) + 1);

提前致谢!

3 个答案:

答案 0 :(得分:3)

int获得的LastIndexOf()索引始终以最右边的值开头,在您的情况下为0.您还必须为此添加String.Lenght

if (filePath.StartsWith(directoryPath))
{
    string newPath =
       filePath.Substring(filePath.LastIndexOf(directoryPath) + directoryPath.Length + 1);
}

答案 1 :(得分:3)

你可以在目录路径中附加一个反斜杠&然后在文件路径中用空字符串替换目录路径

newPath = filePath.Replace(DirectoryPath + @"\", string.Empty);

如果directoryPath与filePath的开头不匹配,则newPath将保持不变。

我在编辑代码之前发布了这个,以显示反斜杠的条件添加 - 这样就可以在上面的代码中删除了。

答案 2 :(得分:2)

我首先检查filePath是否包含DirectoryPath,所以我会这样做:

 var newPath=filePath.Contains(DirectoryPath)?filePath.Substring(DirectoryPath.Length + 1)
                                             :filePath;

甚至更好,使用StartsWith

var newPath=filePath.StartsWith(DirectoryPath)?filePath.Substring(DirectoryPath.Length + 1)
                                             :filePath;