【发布时间】:2015-09-16 04:23:58
【问题描述】:
我的一段基本代码有问题:
var objReader = new StreamReader(ofDialog.FileName);
while (objReader.Peek() >= 0)
{
Helpers.returnMessage(objReader.ReadLine());
// trim the url to root
var uri = new Uri(objReader.ReadLine());
var host = uri.Host;
}
我正在加载一个 .txt 的 url 文件,尝试使用 uri.host 修剪到根目录,但出现错误:
值不能为空。参数名称:UriString
但如果我硬编码一个网址:var uri = new Uri("https://stackoverflow.com/questions/ask");
它工作正常,似乎是当我从 .txt 文件加载时。
任何帮助将不胜感激。
完整代码:
private void btnInput_Click(object sender, EventArgs e)
{
// ofDialog settings
ofDialog.Filter = @"TXT Files|*.txt";
ofDialog.Title = @"Select your source backlink file...";
ofDialog.FileName = "URLs.txt";
// is cancel pressed?
if (ofDialog.ShowDialog() == DialogResult.Cancel)
return;
try
{
var objReader = new StreamReader(ofDialog.FileName);
while (objReader.Peek() >= 0)
{
//Helpers.returnMessage(objReader.ReadLine());
// trim the url to root
var x = objReader.ReadLine();
Helpers.returnMessage(x);
// trim the url to root
var uri = new Uri(x);
var host = uri.Host;
//Helpers.returnMessage(host);
// extract urls here
var wc = new WebClient();
var html = wc.DownloadString(objReader.ReadLine());
// 1. Find all matches in file
var m1 = Regex.Matches(html, @"(<a.*?>.*?</a>)",
RegexOptions.Singleline);
// 2. Loop over each match
foreach (Match m in m1)
{
var value = m.Groups[1].Value;
string href;
// 3. Get href attribute
var m2 = Regex.Match(value, @"href=\""(.*?)\""",
RegexOptions.Singleline);
if (m2.Success)
{
href = m2.Groups[1].Value;
}
else
{
continue;
}
// add to the results
if (href.StartsWith("http"))
{
//Helpers.returnMessage(href);
if (!href.Contains(host))
{
// add urls to the listview
var lvi = new ListViewItem(href);
listViewMain.Items.Add(lvi);
}
}
}
}
}
catch (Exception ex)
{
Helpers.returnMessage(ex.Message);
}
}
returnMessage() 实际上只是返回一个消息框弹出窗口。
【问题讨论】:
-
您是否尝试过调试您的代码并在您单步执行时查看 objReader.ReadLine() 的值是多少?
-
在构建 uri 时,您可能会提前两次阅读器。一次在
Helpers.returnMessage()中,然后在new Uri()构造函数中。记录你传递给这些函数的值,然后你会看到你是否错过了真正的行。 -
您是否故意每次迭代读取两行?我们不知道
Helpers.returnMessage做了什么也无济于事。 -
txt文件是空的吗?
标签: c#