检查给定的完整path

有没有一种方法来检查给定的path是否是完整path? 现在我要做这个:

if (template.Contains(":\\")) //full path already given { } else //calculate the path from local assembly { } 

但是一定要有更优雅的方式来检查这个吗?

尝试使用System.IO.Path.IsPathRooted ? 对绝对path也返回true

 System.IO.Path.IsPathRooted(@"c:\foo"); // true System.IO.Path.IsPathRooted(@"\foo"); // true System.IO.Path.IsPathRooted("foo"); // false System.IO.Path.IsPathRooted(@"c:1\foo"); // surprisingly also true System.IO.Path.GetFullPath(@"c:1\foo");// returns "[current working directory]\1\foo" 

尝试

 System.IO.Path.IsPathRooted(template) 

适用于UNCpath以及本地path。

例如

 Path.IsPathRooted(@"\\MyServer\MyShare\MyDirectory") // returns true Path.IsPathRooted(@"C:\\MyDirectory") // returns true 

老问题,但还有一个适用的答案。 如果您需要确保卷包含在本地path中,则可以像这样使用System.IO.Path.GetFullPath():

 if (template == System.IO.Path.GetFullPath(template)) { ; //template is full path including volume or full UNC path } else { if (useCurrentPathAndVolume) template = System.IO.Path.GetFullPath(template); else template = Assembly.GetExecutingAssembly().Location } 
 Path.IsPathRooted(path) && !Path.GetPathRoot(path).Equals(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal) 

以上条件:

  • 不需要文件系统权限
  • 在大多数情况下, path的格式是无效的(而不是抛出exception)
  • 仅当path包含音量时才返回true

在OP所提出的情况下,它可能比之前的答案中的条件更合适。 不像上述情况:

  • path == System.IO.Path.GetFullPath(path)在这些情况下抛出exception而不是返回false
    • 调用者没有所需的权限
    • 系统无法检索绝对path
    • path包含冒号(“:”),它不是卷标识符的一部分
    • 指定的path,文件名或两者超过系统定义的最大长度
  • 如果path以单个目录分隔符开始,则System.IO.Path.IsPathRooted(path)将返回true

最后,这是一个包装上述条件的方法,同时也排除了其余的可能的例外:

 public static bool IsFullPath(string path) { return !String.IsNullOrWhiteSpace(path) && path.IndexOfAny(System.IO.Path.GetInvalidPathChars().ToArray()) == -1 && Path.IsPathRooted(path) && !Path.GetPathRoot(path).Equals(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal); } 

我并不确定你的意思是完整path (尽pipe从这个例子中假定你的意思是从根开始不是相对的),那么你可以使用Path类来帮助你处理物理文件系统path,它应该覆盖你最可能的事情。