static void Download(string folder, string fileName, IGrabberCallbackObject callbacks) { callbacks.ReportDownloadStarted(fileName); Stream stream = null; const int bytesToRead = 4096 * 4; byte[] buffer = new byte[bytesToRead]; try { HttpWebRequest fileRequest = (HttpWebRequest)HttpWebRequest.Create(GetNgramUrl(fileName)); HttpWebResponse fileResponse = (HttpWebResponse)fileRequest.GetResponse(); if(fileRequest.ContentLength > 0) fileResponse.ContentLength = fileRequest.ContentLength; callbacks.ReportFileSize(fileName, fileResponse.ContentLength); stream = fileResponse.GetResponseStream(); long currentTotal = 0; using(FileStream fileStream = File.Create(folder + fileName)) { int length; do { length = stream.Read(buffer, 0, bytesToRead); fileStream.Write(buffer, 0, length); currentTotal += length; callbacks.ReportDownloadProgress(fileName, currentTotal); } while(length > 0); } } finally { if(stream != null) stream.Close(); } callbacks.ReportDownloadFinished(fileName); }
public static void DownloadTo(string folder, IGrabberCallbackObject callbacks) { if(!Directory.Exists(folder)) Directory.CreateDirectory(folder); Download(folder, GetNgramFullFileName(TotalCountsType), callbacks); for(int i = 1; i < Ngrams.Length; i++) { foreach(string name in Ngrams[i]) { Download(folder, GetNgramFullFileName(i.ToString(), name), callbacks); } } }