gpt4 book ai didi

c# - 从 Uri 对象 C# 获取文件扩展名或 "HasExtension"类型 bool

转载 作者:IT王子 更新时间:2023-10-29 04:21:57 26 4
gpt4 key购买 nike

快速提问:

谁能想到比 RegEx 或一般文本搜索更好的方法来确定 Uri 对象(不是 URL 字符串)是否具有文件扩展名?

欢迎任何想法。如果我错过了 .NET 框架/Uri 类中已经执行此操作的内容,我深表歉意。


稍微复杂一些。


我已经接受了 craigtp 的回答;然而,对于我需要的解决方案是这样的。

var hasExtension = Path.HasExtension(requestUri.AbsolutePath);

致所有尝试过的人。要获得完整而全面的答案,您显然需要 mime 类型字典来进行进一步检查。例如 http://example/this.is.sort.of.valid.but.not.a.mime.type 会返回“true”有 Path.HasExtension,但是,对于我需要的,我永远不会有这种类型的路径。

最佳答案

您可以使用 HasExtension System.IO.Path 的方法类以确定 Uri 的字符串是否具有扩展名。

通过使用 AbsoluteUri Uri 的属性(property)对象,您可以检索表示 Uri 的完整字符串。将此字符串传递给 Path 类的 HasExtension 方法将正确返回一个 bool 值,指示 Uri 是否包含文件扩展名。

将以下代码复制并粘贴到一个简单的控制台应用程序中以进行测试。只有 myUri3myUrl4 返回 True,这也说明 HasExtension 方法可以正确处理文件名(和扩展名)。

using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Uri myURI1 = new Uri(@"http://www.somesite.com/");
Uri myURI2 = new Uri(@"http://www.somesite.com/filenoext");
Uri myURI3 = new Uri(@"http://www.somesite.com/filewithext.jpg");
Uri myURI4 = new Uri(@"http://www.somesite.com/filewithext.jpg?q=randomquerystring");

Console.WriteLine("Does myURI1 have an extension: " + Path.HasExtension(myURI1.AbsoluteUri));
Console.WriteLine("Does myURI2 have an extension: " + Path.HasExtension(myURI2.AbsoluteUri));
Console.WriteLine("Does myURI3 have an extension: " + Path.HasExtension(myURI3.AbsoluteUri));
Console.WriteLine("Does myURI4 have an extension: " + Path.HasExtension(myURI4.AbsoluteUri));

Console.ReadLine();
}
}
}

编辑:

根据提问者关于确定扩展是否是有效扩展的编辑,我在下面编写了一些新代码(复制并粘贴到控制台应用程序中):

using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Uri myUri1 = new Uri("http://www.somesite.com/folder/file.jpg?q=randomquery.string");
string path1 = String.Format("{0}{1}{2}{3}", myUri1.Scheme, Uri.SchemeDelimiter, myUri1.Authority, myUri1.AbsolutePath);
string extension1 = Path.GetExtension(path1);
Console.WriteLine("Extension of myUri1: " + extension1);

Uri myUri2 = new Uri("http://www.somesite.com/folder/?q=randomquerystring");
string path2 = String.Format("{0}{1}{2}{3}", myUri2.Scheme, Uri.SchemeDelimiter, myUri2.Authority, myUri2.AbsolutePath);
string extension2 = Path.GetExtension(path2);
Console.WriteLine("Extension of myUri1: " + extension2);

Console.ReadLine();
}
}
}

这个新代码现在解构 Uri 对象的所有组成部分(即 Scheme - http 部分等),特别是删除任何查询字符串部分乌里。这解决了 Adriano 指出的潜在问题在对此答案的评论中,查询字符串可能包含点字符(因此可能会弄乱 HasExtension 方法)。

一旦 Uri 被解构,我们现在可以正确地确定 Uri 字符串是否一个扩展名以及什么那个扩展名。

从这里开始,这只是将此扩展名与已知有效扩展名列表进行匹配的情况。这部分是 .NET 框架永远不会为您提供的内容,因为任何文件扩展名都可能有效(如果需要,任何应用程序都可以组成自己的文件扩展名!)

关于c# - 从 Uri 对象 C# 获取文件扩展名或 "HasExtension"类型 bool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13047521/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com