c#检查文件路径是否包含特定目录

时间:2014-09-29 14:55:11

标签: c# .net filepath

当我得到像c:\ folder1 \ a12 \ somefile.txt这样的路径时,我想检查文件名是否包含目录c:\ folder1 \ a1。

上述文件名应返回false。

代码无法访问相关文件系统。它不需要检查文件或文件夹的存在。只需要遵循文件和目录名称约定。

如果代码可以处理备用路径分隔符/ UNIX路径,那将是很好的。

4 个答案:

答案 0 :(得分:3)

您只需检查文件路径是否以目录路径开头即可。不要忘记使用分隔符为目录路径添加后缀以避免误报

public static bool IsFileBelowDirectory(string fileInfo, string directoryInfo, string separator)
{
    var directoryPath = string.Format("{0}{1}"
    , directoryInfo
    , directoryInfo.EndsWith(separator) ? "": separator);

    return fileInfo.StartsWith(directoryPath, StringComparison.OrdinalIgnoreCase);
}

答案 1 :(得分:2)

这对你有用吗?

public bool isSubDir(string parentPath, string childPath)
{
    var parentUri = new Uri(parentPath);
    var childUri = new DirectoryInfo(childPath).Parent;
    while(childUri != null)
    {
        if(new Uri(childUri.FullName) == parentUri)
        {
            return true ;
        }
        childUri = childUri.Parent;
    }
    return false;
}

答案 2 :(得分:1)

我认为最好的方法是使用string.Contains()检查完整路径是否包含您想要的文件夹

public static bool IsUnderDirectory(string fullpath, string directoryName)
{
   return fullpath.Contains(string.Format(@"{0}\",directoryName));
}

我希望这可以帮到你

答案 3 :(得分:1)

这样的东西适用于windows&我认为unix样式路径,并不依赖于实际存在的文件/目录。

string someFile = @"/var/folder1/a12/somefile.txt";
// true
Console.WriteLine("Contains?: {0}", someFile.ContainsSubPath(@"/var/folder1/a12/"));
// false
Console.WriteLine("Contains?: {0}", someFile.ContainsSubPath(@"/var/folder1/a1/"));

// windows style
someFile = @"c:\folder1\a12\somefile.txt";
// true
Console.WriteLine("Contains?: {0}", someFile.ContainsSubPath(@"c:\folder1\a12\"));
// false
Console.WriteLine("Contains?: {0}", someFile.ContainsSubPath(@"c:\folder1\a1\"));

以下是扩展方法的代码..

public static bool ContainsSubPath(this string pathToFile, string subPath)
{
    pathToFile = Path.GetDirectoryName(pathToFile) + "\\";
    string searchPath = Path.GetDirectoryName(subPath) + "\\";

    bool containsIt = pathToFile.IndexOf(searchPath, StringComparison.OrdinalIgnoreCase) > -1;

    return containsIt;
}