【问题标题】:Getting Filename from url in C#从 C# 中的 url 获取文件名
【发布时间】:2011-12-14 20:36:00
【问题描述】:

目前我们有一个解决方案,使用这个从 URL 中获取文件名

currentFile = Path.GetFileNameWithoutExtension(url);

我们发现,如果附加的查询字符串包含引号等字符,它会返回路径中的非法字符错误。

例如,如果 url 是

http:\\myurl.com\mypage.aspx?utm_content=This+Is+"Broken"

然后它不会得到文件名。有没有更好、更简洁的方式来获取“mypage”?

【问题讨论】:

  • 你不能在调用 GetFileNameWithoutExtension 之前从 url 中删除查询字符串吗?
  • 检查这个:stackoverflow.com/a/6015377/559144 如果它解决了您的问题,请投票给他 ;-)
  • 你试过 Server.UrlEncode(url);在获取文件名之前?
  • 请注意,URL 不需要引用文件,没有非法字符的名称仍然可以是非法文件名。

标签: c# .net


【解决方案1】:

使用这个:Uri.AbsolutePath

Request.Url.AbsolutePath

【讨论】:

  • string filename = Path.GetFileName(new Uri(myUrlString).AbsolutePath);
【解决方案2】:

我只会找到?,如果它存在,则去掉字符串的其余部分,然后将其用于 GetFileNameWithoutExtension。

例如:

        string url;
        int index;

        index = url.IndexOf("?");
        if (index != -1)
        {
            url = url.Substring(0, index);
        }
        currentFile = Path.GetFileNameWithoutExtension(url);

【讨论】:

  • 这比框架已经提供的更加复杂和冗长:Request.Url.AbsolutePath
  • @DavidePiras:你为什么假设正在处理的 URL 是请求 URL? OP在最初的问题中没有提到这一点。我提供的解决方案是对他们发布的仅引用 URL 的代码的直接响应。此 url 可能来自日志文件,可能来自引用字符串,或者来自带有嵌入引用的已解析 HTML 页面。
【解决方案3】:

使用 HttpContext.Current.Request.PhysicalPath 而不是完整的 URL 作为 Path.GetFileNameWithoutExtension 方法的参数。

希望这会有所帮助,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 2017-11-17
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多