我在存储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
代替了/
,我可以通过再次替换来克服,但是在\\
之后,我有2x //而不是分别用2x替换https
仅执行了一次,因此即使我以简单的方式替换它也无法正常工作,因为它将创建类似\\
的字符串。
解决此问题的方法是创建自定义函数来克服此问题,这对我来说不是问题,但我想应该有更好的方法来实现。
答案 0 :(得分:1)
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指向资源。