在结合其他回答的建议后,我意识到我想到的与Ronnie Overby's answer大致相同。以下是一些测试,以指出需要考虑的一些事情:
- 文件夹可以有“扩展名”:
C:\Temp\folder_with.dot
- 文件不能以目录分隔符(斜杠)结尾
- 从技术上讲,有两个特定于平台的目录分隔符——即可能是斜杠也可能不是(
Path.DirectorySeparatorChar
和Path.AltDirectorySeparatorChar
)
测试(Linqpad)
var paths = new[] {
// exists
@"C:\Temp\dir_test\folder_is_a_dir",
@"C:\Temp\dir_test\is_a_dir_trailing_slash\",
@"C:\Temp\dir_test\existing_folder_with.ext",
@"C:\Temp\dir_test\file_thats_not_a_dir",
@"C:\Temp\dir_test\notadir.txt",
// doesn't exist
@"C:\Temp\dir_test\dne_folder_is_a_dir",
@"C:\Temp\dir_test\dne_folder_trailing_slash\",
@"C:\Temp\dir_test\non_existing_folder_with.ext",
@"C:\Temp\dir_test\dne_file_thats_not_a_dir",
@"C:\Temp\dir_test\dne_notadir.txt",
};
foreach(var path in paths) {
IsFolder(path/*, false*/).Dump(path);
}
结果
C:\Temp\dir_test\folder_is_a_dir
True
C:\Temp\dir_test\is_a_dir_trailing_slash\
True
C:\Temp\dir_test\existing_folder_with.ext
True
C:\Temp\dir_test\file_thats_not_a_dir
False
C:\Temp\dir_test\notadir.txt
False
C:\Temp\dir_test\dne_folder_is_a_dir
True
C:\Temp\dir_test\dne_folder_trailing_slash\
True
C:\Temp\dir_test\non_existing_folder_with.ext
False (this is the weird one)
C:\Temp\dir_test\dne_file_thats_not_a_dir
True
C:\Temp\dir_test\dne_notadir.txt
False
方法
public static bool IsFolder(string path, bool assumeDneLookAlike = true)
{
if (Directory.Exists(path)
|| path.EndsWith("" + Path.DirectorySeparatorChar)
|| path.EndsWith("" + Path.AltDirectorySeparatorChar))
return true;
if (File.Exists(path))
return false;
if (!Path.HasExtension(path) && assumeDneLookAlike)
return true;
return false;
}