路径GetFileName与\

时间:2018-10-16 11:10:57

标签: c# path

我在存储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仅执行了一次,因此即使我以简单的方式替换它也无法正常工作,因为它将创建类似\\的字符串。

解决此问题的方法是创建自定义函数来克服此问题,这对我来说不是问题,但我想应该有更好的方法来实现。

1 个答案:

答案 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指向资源。