这是代码 :namespace ConA
{
class Program
{
static void Main(string[] args)
{
Down down = new Down();
down.Check();
}
} public class Down
{
private long ftotal; //当前下载长度
private long total; //文件总长度
private string StrFileName;
private string StrUrl;
private long lStartPos; //已下载文件总长度
private FileStream fs;
private HttpWebRequest req;
HttpWebResponse res;
private Thread t;
public Down()
{
ftotal = 0;
total = 0;
StrFileName = "D:\\ZJS\\NWHZJS.rar";
StrUrl = "http://www.zjs100.com/NWHZJS.rar";
lStartPos = 0;
}
public void Check() //打开上次下载的文件或新建文件
{
try
{
req = (HttpWebRequest)HttpWebRequest.Create(StrUrl);
req.Timeout = 600000;
res = (HttpWebResponse)req.GetResponse();
total = res.ContentLength; if (File.Exists(StrFileName))
{
fs = File.OpenWrite(StrFileName);
lStartPos = fs.Length;
if (total == lStartPos)
{
// Console.WriteLine("已下载完成,将重新下载!");
File.Delete(StrFileName);
lStartPos = 0;
}
else
{
//Console.WriteLine("已下载:" + lStartPos + "B");
ftotal = lStartPos;
fs.Seek(lStartPos, SeekOrigin.Current); //移动文件流中的当前指针
}
}
else
{
fs = new FileStream(StrFileName, FileMode.Create); //新建一个文件
}
DownFile();
Console.Read();
}
catch (Exception e)
{
if (t.IsAlive) t.Abort();
fs.Close();
Console.WriteLine("Error:" + e.ToString());
Console.Read();
}
} public void ThreadFunc()
{
while (true)
{
Console.WriteLine((int)(ftotal / 1000) + "kb/" + (int)(total / 1000) + "kb");
Thread.Sleep(1000);
Console.Clear();
}
} private void DownFile() //下载更新文件
{
/* ThreadStart ts = new ThreadStart(ThreadFunc);
t = new Thread(ts);
t.Start();*/ if (lStartPos > 0) req.AddRange((int)lStartPos);
System.Text.Encoding utf8 = System.Text.Encoding.Default;
Stream ns = res.GetResponseStream();
byte[] nbytes = new byte[512];
int nReadSize = 0;
nReadSize = ns.Read(nbytes, 0, 512);
while (nReadSize > 0)
{
fs.Write(nbytes, 0, nReadSize);
ftotal += nReadSize;
Console.Write((int)(ftotal / 1000) + "kb ");
nReadSize = ns.Read(nbytes, 0, 512);
}
ns.Close();
t.Abort();
fs.Close();
Console.WriteLine("下载完成!");
SetupFile();
/*if (ftotal == total)
{
}
else
{
Console.WriteLine("坑爹啊!");
Console.Read();
}*/
} private void SetupFile() //安装文件
{
try
{
string gbPath = StrFileName.Substring(0, StrFileName.LastIndexOf("\\"));
BZip2.Decompress(File.OpenRead(StrFileName), File.Create(gbPath + "\\ZJS.exe"), true); Process proc = new Process();
if (File.Exists(gbPath + "\\NWHZJS.txt")) File.Create(gbPath + "\\NWHZJS.txt");
if (File.Exists(gbPath + "\\OWHZJS.txt")) File.Create(gbPath + "\\OWHZJS.txt");
File.Copy(gbPath + "\\NWHZJS.txt", gbPath + "\\OWHZJS.txt", true); //保存新版本信息。
Console.WriteLine("成功升级到最新系统!");
proc = System.Diagnostics.Process.Start(gbPath + "\\ZJS.exe");
Console.Read();
}
catch (Exception e)
{
Console.WriteLine("Error:" + e.ToString());
Console.Read();
}
}
}
}要下载的文件是860多kB,正常下载没问题,但是当运行一会我把控制台关掉,然后再次运行,如此反复几次之后,出现下载的文件大小居然有1.8M 然后安装出错,这是为什么呢。这个断点续传到底问题出在哪里?在线等。
{
class Program
{
static void Main(string[] args)
{
Down down = new Down();
down.Check();
}
} public class Down
{
private long ftotal; //当前下载长度
private long total; //文件总长度
private string StrFileName;
private string StrUrl;
private long lStartPos; //已下载文件总长度
private FileStream fs;
private HttpWebRequest req;
HttpWebResponse res;
private Thread t;
public Down()
{
ftotal = 0;
total = 0;
StrFileName = "D:\\ZJS\\NWHZJS.rar";
StrUrl = "http://www.zjs100.com/NWHZJS.rar";
lStartPos = 0;
}
public void Check() //打开上次下载的文件或新建文件
{
try
{
req = (HttpWebRequest)HttpWebRequest.Create(StrUrl);
req.Timeout = 600000;
res = (HttpWebResponse)req.GetResponse();
total = res.ContentLength; if (File.Exists(StrFileName))
{
fs = File.OpenWrite(StrFileName);
lStartPos = fs.Length;
if (total == lStartPos)
{
// Console.WriteLine("已下载完成,将重新下载!");
File.Delete(StrFileName);
lStartPos = 0;
}
else
{
//Console.WriteLine("已下载:" + lStartPos + "B");
ftotal = lStartPos;
fs.Seek(lStartPos, SeekOrigin.Current); //移动文件流中的当前指针
}
}
else
{
fs = new FileStream(StrFileName, FileMode.Create); //新建一个文件
}
DownFile();
Console.Read();
}
catch (Exception e)
{
if (t.IsAlive) t.Abort();
fs.Close();
Console.WriteLine("Error:" + e.ToString());
Console.Read();
}
} public void ThreadFunc()
{
while (true)
{
Console.WriteLine((int)(ftotal / 1000) + "kb/" + (int)(total / 1000) + "kb");
Thread.Sleep(1000);
Console.Clear();
}
} private void DownFile() //下载更新文件
{
/* ThreadStart ts = new ThreadStart(ThreadFunc);
t = new Thread(ts);
t.Start();*/ if (lStartPos > 0) req.AddRange((int)lStartPos);
System.Text.Encoding utf8 = System.Text.Encoding.Default;
Stream ns = res.GetResponseStream();
byte[] nbytes = new byte[512];
int nReadSize = 0;
nReadSize = ns.Read(nbytes, 0, 512);
while (nReadSize > 0)
{
fs.Write(nbytes, 0, nReadSize);
ftotal += nReadSize;
Console.Write((int)(ftotal / 1000) + "kb ");
nReadSize = ns.Read(nbytes, 0, 512);
}
ns.Close();
t.Abort();
fs.Close();
Console.WriteLine("下载完成!");
SetupFile();
/*if (ftotal == total)
{
}
else
{
Console.WriteLine("坑爹啊!");
Console.Read();
}*/
} private void SetupFile() //安装文件
{
try
{
string gbPath = StrFileName.Substring(0, StrFileName.LastIndexOf("\\"));
BZip2.Decompress(File.OpenRead(StrFileName), File.Create(gbPath + "\\ZJS.exe"), true); Process proc = new Process();
if (File.Exists(gbPath + "\\NWHZJS.txt")) File.Create(gbPath + "\\NWHZJS.txt");
if (File.Exists(gbPath + "\\OWHZJS.txt")) File.Create(gbPath + "\\OWHZJS.txt");
File.Copy(gbPath + "\\NWHZJS.txt", gbPath + "\\OWHZJS.txt", true); //保存新版本信息。
Console.WriteLine("成功升级到最新系统!");
proc = System.Diagnostics.Process.Start(gbPath + "\\ZJS.exe");
Console.Read();
}
catch (Exception e)
{
Console.WriteLine("Error:" + e.ToString());
Console.Read();
}
}
}
}要下载的文件是860多kB,正常下载没问题,但是当运行一会我把控制台关掉,然后再次运行,如此反复几次之后,出现下载的文件大小居然有1.8M 然后安装出错,这是为什么呢。这个断点续传到底问题出在哪里?在线等。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货