URL上的Path.Combine给出异常:不支持给定路径的格式

时间:2015-05-13 11:00:02

标签: c# path system.drawing path-combine

我在以下代码中遇到错误

Uri imagesrc = new Uri("http://somewebsite.com/demo/images/slideshow/29.jpg");
Image image = Image.FromFile(Path.Combine("/comph/", imagesrc.ToString()));

我也尝试过以下代码 - 其中/comph/是我的根目录

Image.FromFile(Path.Combine("/comph/","http://some_other_website.com/demo/images/slideshow/29.jpg");

当我在浏览器中粘贴此网址时,上面的图片网址是正确的。

使用上面的代码会引发异常:

  

不支持给定路径的格式。

此代码有什么问题?

3 个答案:

答案 0 :(得分:2)

Path.Combine不支持网址。

如果要使用Path.Combine

,则必须先将网址转换为(相对)文件路径

如果您想操纵网址,可以使用the Url constructor that takes a base url and a relative url and combines them

答案 1 :(得分:-1)

快速(但有点脏)方法是从Uri获取本地部分,剥离根"/"然后使用Path.Combine:

Uri imagesrc = new Uri("http://somewebsite.com/demo/images/slideshow/29.jpg");    
string target = Path.Combine("comph", imagesrc.LocalPath.TrimStart('/'));

结果为"comph\demo/images/slideshow/29.jpg",这样可行,但您可以将/替换为\用于化妆品。

答案 2 :(得分:-1)

不要将Path.Combine用于网址。该方法适用于本地文件系统路径!

虽然它可能无法在所有情况下都有效,但您通常可以使用new Uri(Uri, Uri)来合并网址:

// using System;
var absoluteUri = new Uri('http://example.com/path/');
var relativeUri = new Uri('./more', UriKind.Relative);
var combinedUri = new Uri(absoluteUri, relativeUri);

当现有网址的路径以/结尾时,将路径添加到现有网址似乎只能正常工作;否则,组合网址中可能缺少最后一个路径段。

(我还没有测试当现有网址已经有查询字符串或片段时会发生什么,顺便说一下。如果在你的情况下它可能是相关的,请确保自己测试一下。)