示例#1
0
        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);
        }