public static bool getFilefromNet(string url, string saveto)
{
try
{
// this is for mono to a ssl server
//ServicePointManager.CertificatePolicy = new NoCheckCertificatePolicy();
ServicePointManager.ServerCertificateValidationCallback =
new System.Net.Security.RemoteCertificateValidationCallback(
(sender, certificate, chain, policyErrors) => { return true; });
log.Info(url);
// Create a request using a URL that can receive a post.
WebRequest request = WebRequest.Create(url);
request.Timeout = 10000;
// Set the Method property of the request to POST.
request.Method = "GET";
// Get the response.
WebResponse response = request.GetResponse();
// Display the status.
log.Info(((HttpWebResponse)response).StatusDescription);
if (((HttpWebResponse)response).StatusCode != HttpStatusCode.OK)
return false;
if (File.Exists(saveto))
{
DateTime lastfilewrite = new FileInfo(saveto).LastWriteTime;
DateTime lasthttpmod = ((HttpWebResponse)response).LastModified;
if (lasthttpmod < lastfilewrite)
{
if (((HttpWebResponse)response).ContentLength == new FileInfo(saveto).Length)
{
log.Info("got LastModified " + saveto + " " + ((HttpWebResponse)response).LastModified +
" vs " + new FileInfo(saveto).LastWriteTime);
response.Close();
return true;
}
}
}
// Get the stream containing content returned by the server.
Stream dataStream = response.GetResponseStream();
long bytes = response.ContentLength;
long contlen = bytes;
byte[] buf1 = new byte[1024];
if (!Directory.Exists(Path.GetDirectoryName(saveto)))
Directory.CreateDirectory(Path.GetDirectoryName(saveto));
FileStream fs = new FileStream(saveto + ".new", FileMode.Create);
DateTime dt = DateTime.Now;
while (dataStream.CanRead && bytes > 0)
{
Application.DoEvents();
log.Debug(saveto + " " + bytes);
int len = dataStream.Read(buf1, 0, buf1.Length);
bytes -= len;
fs.Write(buf1, 0, len);
}
fs.Close();
dataStream.Close();
response.Close();
File.Delete(saveto);
File.Move(saveto + ".new", saveto);
return true;
}
catch (Exception ex)
{
log.Info("getFilefromNet(): " + ex.ToString());
return false;
}
}