I made a LinkChecker program which checks URLs from a text file and outputs status into another file like this:
http://valid-url.com;OK http://invalid-url.com;The remote server returned an error: (404) Not Found.
I have about 1400 URLs in the input file and it takes about 12 minutes to run.
I made it work. In what ways can I achieve rightness and fastness?
public class LinkChecker
{
static void Main()
{
string line = string.Empty;
string inputFile = @"D:\tmp\links.txt";
StreamReader file = new StreamReader(inputFile);
string outputFile = @"D:\tmp\out.txt";
ClearOutputFile(outputFile);
while(!string.IsNullOrEmpty(line = file.ReadLine()))
{
string currentUrlAndStatus = CheckURL(line);
if(!string.IsNullOrEmpty(currentUrlAndStatus))
{
WriteToFile(currentUrlStatus, outputFile);
}
}
}
private static string CheckURL(string url)
{
string status = string.Empty;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "HEAD";
request.Proxy = null;
try
{
using(HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
status = response.StatusCode.ToString();
}
}
catch (WebException ex)
{
status = ex.Status;
}
return url + ";" + status;
}
private static void ClearOutputFile(string file)
{
using (Filestream fileStream = File.Open(file, FileMode.Open)
{
fileStream.SetLength(0);
}
}
private static void WriteToFile(string message, string filename)
{
using(var writer = new StreamWriter(filename, true))
{
writer.WriteLine(message);
}
}
}