当我得到像c:\ folder1 \ a12 \ somefile.txt这样的路径时,我想检查文件名是否包含目录c:\ folder1 \ a1。
上述文件名应返回false。
代码无法访问相关文件系统。它不需要检查文件或文件夹的存在。只需要遵循文件和目录名称约定。
如果代码可以处理备用路径分隔符/ UNIX路径,那将是很好的。
答案 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;
}