void DownloadFile(TreeNode node, TreeNode Lnode) { string newFileName = System.IO.Path.Combine(Lnode.Name, node.Text); if (File.Exists(newFileName)) {//先默认覆盖重传 int opcode = allowRep; if (opcode == 0) { FileReplace fileReplace = new FileReplace(node.Text); fileReplace.ShowDialog(); if (fileReplace.Flag) { allowRep = fileReplace.Status; } opcode = fileReplace.Status; } if (opcode == -1) { return; } File.Delete(newFileName); } string tempFileName = Path.Combine(Lnode.Name, System.IO.Path.GetFileNameWithoutExtension(newFileName) + ".tmp"); FileStream tmpStream = null; if (File.Exists(tempFileName)) { try { tmpStream = new FileStream(tempFileName, FileMode.Open); byte[] bufs = new byte[14]; tmpStream.Read(bufs, 0, 14); string oldDate = myFTP.ecd.GetString(bufs, 0, 14); tmpStream.Close(); string newDate = myFTP.GetDate(node.Name); if (oldDate != newDate) { throw new Exception(); } } catch { AddLog("缓存不可用,尝试重新下载:"); tmpStream.Close(); File.Delete(tempFileName); } } //准备缓存文件,并开始下载 try { //重新生成缓存文件 if (!File.Exists(tempFileName)) { tmpStream = new FileStream(tempFileName, FileMode.Create); string newDate = myFTP.GetDate(node.Name); byte[] tmps = myFTP.ecd.GetBytes(newDate); //AddLog(tmps.Length.ToString()); tmpStream.Write(myFTP.ecd.GetBytes(newDate), 0, tmps.Length); tmpStream.Close(); } myFTP.DownLoadFile(tempFileName, node.Name); } catch (Exception ex) { tmpStream.Close(); AddLog(ex.Message); } //保存,并删除缓存 FileStream file = new FileStream(tempFileName, FileMode.Open); byte[] tmp2 = new byte[8192]; file.Seek(14, SeekOrigin.Begin); FileStream saveFile = new FileStream(newFileName, FileMode.Create); while (true) { int BytesDone = file.Read(tmp2, 0, tmp2.Length); if (BytesDone <= 0) { file.Close(); saveFile.Close(); break; } saveFile.Write(tmp2, 0, BytesDone); } File.Delete(tempFileName); }