路径获取文件名交换 / 与 \



我有一个问题,我在存储htmlBody文本的地方有MySQL DB。

Html正文文本是类似于html的文本。例:

<img src='https://www.Something.com/Images/SomeImage.jpg'>
<p>This is some image</p>

现在我有 winform 应用程序,我在其中构建了自定义控件,该控件从普通的 winform 元素构建 html 文本。当我从 MySQL 加载的字符串中提取元素属性时出现问题。

我有这样的字符串:<img src='https://www.Something.com/Images/SomeImage.jpg'>

在我的函数中,我检测到它是图像,并为它创建新的自定义类,在该类中,我有 2 个这样的元素:

public string srcPath { get; set; }
public string srcFileName { get; set; }

要从我的网址(https://www.Something.com/Images/SomeImage.jpg(中提取路径和名称,我使用Path但是当我这样做时string filename = Path.GetDirectoryName(myUrl);而不是https://www.Something.com/Images我得到https:\www.Something.com\Images

正如您第一眼看到的那样,它用\替换了/,我可以通过再次替换它来克服它,但是https之后我有 2x//而是用 2x 替换它,\它只做了一次,所以即使我确实以简单的方式替换它也不会工作,因为它会创建像https:/www.Something.com/Images这样的字符串。

我带来的解决方案是创建自定义功能来克服这个问题,这对我来说不是问题,但我想一定有更好的方法。

URI 不是文件路径,正如您所发现的那样,将它们处理不可避免地会导致问题。但是,Uri类具有可帮助进行此分解的Segments属性。

结合UriBuilder,您可以:

var uri = new Uri("http://a/b/c/d");
var ub = new UriBuilder(uri);
ub.Path = string.Concat(uri.Segments.Take(uri.Segments.Length - 1));
Console.WriteLine(ub.Uri.AbsoluteUri);
Console.WriteLine(uri.Segments.Last());

值得注意的是,URI 的最后一段并不是真正的文件名。URI 作为一个整体指向资源。

相关内容

  • 没有找到相关文章

最新更新