我使用WebClient()从C#网站下载了很多文件到我的本地目录。
现在我想创建一个控制台应用程序(没有Web应用程序)来替换所有html页面中的所有链接,以便任何平台上任何人都可读取可移植的网站(usb密钥,移动设备等),页面必须是由任何浏览器打开,所有链接必须有效。
链接的输入方式如下:
<a href="/fr/wol/b/r30/lp-f/Rbi8/F/1995/31/">xxx</a>
<a href="/fr/wol/b/r30/lp-f/Rbi8/F/1995/66/21#h=134:288-135:0">zzz</a>
<a href="/fr/wol/b/bc/r30/lp-f/1001060069/1026">yyy</a>
<a href="/fr/wol/b/r30/lp-f/Rbi8/F/1995/61/3#h=16:360-17:0">xxx1</a>
<a href="/fr/wol/dx/r30/lp-f/1001060064/30652">xxx1</a>
<a href="http://www.domain.com/fr/1001060064/30652">xxx1</a>
我不想拥有这种链接:
<a href="file://C:/Users/Documents/Site/fr/wol/b/r30/lp-f/Rbi8/F/1995/31/">xxx</a>
因为整个网站必须位于任何地方。
目标是拥有这样的相对链接:(这只是一个例子而且不准确)
<a href="../../b/r30/lp-f/Rbi8/F/1995/31/">xxx</a>
<a href="../../b/r30/lp-f/Rbi8/F/1995/66/21#h=134:288-135:0">zzz</a>
<a href="../../../bc/r30/lp-f/1001060069/1026">yyy</a>
<a href="../../b/r30/lp-f/Rbi8/F/1995/61/3#h=16:360-17:0">xxx1</a>
<a href="../wol/1001060064/30652">xxx1</a>
语言中是否存在.Net Windows窗体或控制台应用程序(非Web)C#以快速生成这些相关链接?
答案 0 :(得分:0)
邋and且没有错误检查,但它应该让你开始。
public void EditWebPages()
{
foreach(String file in Directory.GetFiles("INSERT_FILES_DIR"))
{
String[] lines = File.ReadAllLines(file);
for(int i=0; i<lines.Length; i++)
lines[i] = lines[i].Replace(RegexGrab("href=\"(.*?)\"", lines[i]), "../../YOUR/RELATIVE/LINK/");
File.WriteAllLines(file, lines);
}
}
public static String RegexGrab(String reg, String txt)
{
Regex regex = new Regex(reg, RegexOptions.Singleline);
Match match = regex.Match(txt);
String str = match.Groups[1].ToString();
return str;
}
答案 1 :(得分:0)
似乎就是答案:
Uri uri1 = new Uri(linkPage);
Uri uri2 = new Uri(linkParentPage);
Uri relativeUri = uri2.MakeRelativeUri(uri1);
string result = Uri.UnescapeDataString(relativeUri.ToString());