检查给定的完整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,它应该覆盖你最可能的事情。
- 如果asynchronous等待不会创build任何其他线程,那么它如何使应用程序响应?
- TargetedPatchingOptOut:“在NGen图像边界上内联的性能至关重要”?
- 如何在C#中获得string的一致字节表示而不需要手动指定编码?
- 时区缩写
- 有没有替代string。replace是不区分大小写?
- C#中事件如何导致内存泄漏,弱引用如何帮助缓解这种情况?
- 运算符在C#中使用基于接口的编程重载
- 什么是NuGetPackageImportStamp?
- 无法加载文件或程序集“WebGrease,Version = 1.5.1.25624,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”或其某个依赖关系