當我得到類似c:\ folder1 \ a12 \ somefile.txt的路徑時,我想檢查文件名是否包含目錄c:\ folder1 \ a1。c#檢查文件路徑是否包含特定目錄
上面的文件名應該返回false。
該代碼無權訪問相關文件系統。它不需要檢查文件或文件夾的存在。只需要遵循文件和目錄名稱約定。
如果代碼可以處理備用路徑分隔符/ UNIX路徑,那就太好了。
當我得到類似c:\ folder1 \ a12 \ somefile.txt的路徑時,我想檢查文件名是否包含目錄c:\ folder1 \ a1。c#檢查文件路徑是否包含特定目錄
上面的文件名應該返回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);
}
不要忘記正常化雙方的分隔符。 – 2014-09-29 14:58:31
@AlexeiLevenkov是正確的,更重要的是,您可能需要仔細研究OrdinalIgnoreCase參數,因爲Unix路徑通常區分大小寫。您的電話要麼參數化該值,要麼將其包裝在將根據您的環境構建的類中 – samy 2014-09-29 21:18:12
這會適合您嗎?
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;
}
我認爲最好的辦法是使用string.Contains(),以檢查是否完整路徑包含要
public static bool IsUnderDirectory(string fullpath, string directoryName)
{
return fullpath.Contains(string.Format(@"{0}\",directoryName));
}
我希望這會幫助你
這適用於Windows文件夾。只需要確保沒有尾隨分隔符。 – James 2014-09-29 15:57:28
喜歡的東西的文件夾這應該適用於我認爲的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;
}
還有,你試過這麼遠嗎? – EricLaw 2014-09-29 14:56:47
我的代碼是在.NET 1.1中寫入的,並且條件太多。我正在尋找.NET 4+中的新功能,但找不到任何快速解決方案。至少在Windows路徑中,我希望有人已經解決了這個問題。 – James 2014-09-29 15:10:00
你可以使用'string.Contains'或'string.StartsWith'嗎? – 2014-09-29 15:21:00