在C#中,检查文件名*可能*有效(不存在)

System.IO命名空间中是否存在用于检查文件名有效性的方法?

例如,C:\foo\bar将验证而:"~-*不会

或更棘手的是,X:\foo\bar将验证系统上是否有X:驱动器,但不会。

我想我可以自己编写这样的方法,但是我对内置方法更感兴趣。


喵喵时光机
浏览 644回答 3
3回答

海绵宝宝撒

做就是了;System.IO.FileInfo fi = null;try {  fi = new System.IO.FileInfo(fileName);}catch (ArgumentException) { }catch (System.IO.PathTooLongException) { }catch (NotSupportedException) { }if (ReferenceEquals(fi, null)) {  // file name is not valid} else {  // file name is valid... May check for existence by calling fi.Exists.}用于创建FileInfo实例的文件不需要存在。

Smart猫小萌

您可以从Path.GetInvalidPathChars和GetInvalidFileNameChars获取无效字符列表,如本问题所述。如jberger所述,此方法的响应中未包含其他一些字符。有关Windows平台的更多详细信息,请查看MSDN 上的命名文件,路径和命名空间,正如Micah 指出的那样,存在Directory.GetLogicalDrives来获取有效驱动器的列表。

翻过高山走不出你

您可以使用System.Uri类。Uri类不仅对Web URL有用,而且还处理文件系统路径。使用Uri.TryCreate方法查找路径是否是根目录,然后使用IsLoopback属性确定Uri是否引用本地计算机。这是一个简单的方法,可确定字符串是否为有效的,本地的且有根的文件路径。public bool IsPathValidRootedLocal(String pathString) {    Uri pathUri;    Boolean isValidUri = Uri.TryCreate(pathString, UriKind.Absolute, out pathUri);    return isValidUri && pathUri != null && pathUri.IsLoopback;}我相信这会奏效。
打开App,查看更多内容
随时随地看视频慕课网APP