当我获得像c:\folder1\a12\somefile.txt这样的路径时,我想检查文件名是否包含目录c:\folder1\a1。
上面的文件名应该返回false。
代码无法访问有关文件系统的信息。它不需要检查文件或文件夹的存在性,只需要遵循文件和目录名称约定即可。
如果代码能处理备用路径分隔符/UNIX路径就更好了。
您可以简单地检查文件路径是否以目录路径开头。不要忘记使用分隔符后缀目录路径,以避免误报。
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);
}
Path.GetFullPath(fileInfo).StartsWith(Path.GetFullPath(directoryInfo), ignoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal);
- Scover这对您有用吗?
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;
}
public static bool IsUnderDirectory(string fullpath, string directoryName)
{
return fullpath.Contains(string.Format(@"{0}\",directoryName));
}
我认为类似这样的方式可以适用于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;
}
string.Contains
或string.StartsWith
吗? - Mohammad Mirmostafa