给定一个字符串检测地址类型

时间:2009-12-24 09:43:02

标签: c# path

我有一个文本框,允许用户以这些形式输入地址:

somefile.htm
someFolder/somefile.htm
c:\somepath\somemorepath\somefile.htm
http://someaddress
\\somecomputer\somepath\somefile.htm

或导航到某些内容的任何其他来源,包含一些标记。

我是否还应在文本框附近放置一个下拉列表,询问这是什么类型的地址,或者是否有可靠的方法可以自动检测文本框中的地址类型?

4 个答案:

答案 0 :(得分:3)

我认为没有一种特别好的方法可以自动执行此操作而不需要自己进行检测。

如果您不介意在失败案例中捕获异常(我通常会这样做),那么下面的代码段将适用于您的示例(注意它也会将目录标识为类型文件)

public string DetectScheme(string address)
{
    Uri result;
    if (Uri.TryCreate(address, UriKind.Absolute, out result))
    {
        // You can only get Scheme property on an absolute Uri
        return result.Scheme;
    }

    try
    {
        new FileInfo(address);
        return "file";
    }
    catch
    {
        throw new ArgumentException("Unknown scheme supplied", "address");
    }
}

答案 1 :(得分:1)

我建议使用正则表达式来确定路径,类似于

  public enum FileType
  {
     Url,
     Unc,
     Drive,
     Other,
  }
  public static FileType DetermineType(string file)
  {
     System.Text.RegularExpressions.MatchCollection matches = System.Text.RegularExpressions.Regex.Matches(file, "^(?<unc>\\\\)|(?<drive>[a-zA-Z]:\\.*)|(?<url>http://).*$", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
     if (matches.Count > 0)
     {
        if (matches[0].Groups["unc"].Value == string.Empty) return FileType.Unc;
        if (matches[0].Groups["drive"].Value == string.Empty) return FileType.Drive;
        if (matches[0].Groups["url"].Value == string.Empty) return FileType.Url;
     }
     return FileType.Other;
  }

答案 2 :(得分:0)

如果只有有限数量的格式,您可以对这些格式进行验证,并且只允许有效格式。这将使自动检测更容易,因为您将能够使用相同的逻辑。

答案 3 :(得分:0)