我编写的Function
以检查是否存在File/Directory
路径,并且RecentPath
检索Function
检查的最后一条路径
private static String IRecentPath;
public static String RecentPath
{
get
{
return IRecentPath;
}
}
public static Boolean Exists(String Path, Int32 PathType = 0)
{
return Exist(Path, PathType);
}
internal static Boolean Exist(String Path, Int32 PathType = 0)
{
Boolean Report = false;
switch (PathType)
{
case 0:
Report = (Directory.Exists(Path) || File.Exists(Path));
IRecentPath = Path;
break;
case 1:
String MPath = AppDomain.CurrentDomain.BaseDirectory;
Report = (Directory.Exists(System.IO.Path.Combine(MPath, Path)) || File.Exists(System.IO.Path.Combine(MPath, Path)));
IRecentPath = System.IO.Path.Combine(MPath, Path);
break;
case 2:
String LPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
Report = (Directory.Exists(System.IO.Path.Combine(LPath, Path)) || File.Exists(System.IO.Path.Combine(LPath, Path)));
IRecentPath = System.IO.Path.Combine(LPath, Path);
break;
default:
break;
}
return Report;
}
问题是RecentPath
总是检索调用函数时设置的路径,而不是最终路径。
示例:
假设我需要检查/user
中是否存在myDocument
目录,然后获取最近检查过的路径,所以:
Path.Exists("/user", 2);
MessageBox.Show(Path.RecentPath);
输出应该是C:\Users\Hossam\Documents\user\
,而只是/user
。
答案 0 :(得分:3)
输入字符串开头的斜杠(/
)显然会干扰Path.Combine()
。试试这个:
Path.Exists("user", 2);
MessageBox.Show(Path.RecentPath);
输出:C:\Users\Hossam\Documents\user
答案 1 :(得分:3)
这是因为您传递了一个以正斜杠开头的字符串 在Windows系统中,这是AltDirectorySeparatorChar
在Path.Combine文档中,您可以阅读此评论
如果path2不包含根(例如,如果path2未启动) 使用分隔符或驱动器规范),结果是a 这两条路径的连接,带有插入分隔符 字符。 如果path2包含root,则返回path2。
现在查看Path.Combine的源代码,你可以看到
.....
if (IsPathRooted(path2))
{
return path2;
}
....
当然IsPathRooted包含
.....
if (path[0] == AltDirectorySeparatorChar)
{
return true;
}
.....