コード例 #1
0
ファイル: Class1.cs プロジェクト: fan852654/Desktop-Pet
        public static void StartFTPDownload(string uri, string username, string password, string path, string filename, bool isFugai)
        {
            Thread thread = new Thread(new ParameterizedThreadStart(Ftpdownloadfile));

            if (!isFugai)
            {
                int    i        = 0;
                string pathfile = Path.Combine(path, filename);
                while (File.Exists(pathfile))
                {
                    filename = "(" + i + ")" + filename;
                    pathfile = Path.Combine(path, filename);
                    i++;
                }
            }
            DownloadJobInfo dji = new DownloadJobInfo
            {
                uri      = new Uri(uri),
                path     = path,
                filename = filename,
                dt       = DownloadType.FTP,
                isFugai  = isFugai,
                username = username,
                password = password,
                Length   = GetFTPFileLength(new Uri(uri), username, password)
            };

            thread.Name = dji.ToString();
            DownloadPercent.Add(dji, 0);
            Jobs.Add(thread);
            thread.Start(dji);
        }
コード例 #2
0
ファイル: Class1.cs プロジェクト: fan852654/Desktop-Pet
        public DownloadJobInfo copyNew(DownloadJobInfo ddd)
        {
            DownloadJobInfo dji = new DownloadJobInfo
            {
                uri      = ddd.uri,
                path     = ddd.path,
                filename = ddd.filename,
                username = ddd.username,
                password = ddd.password,
                isFugai  = ddd.isFugai,
                dt       = ddd.dt
            };

            return(dji);
        }
コード例 #3
0
ファイル: Class1.cs プロジェクト: fan852654/Desktop-Pet
        public static void StartHttpDownload(Uri uri, string path, string filename, bool isFugai)
        {
            Thread          thread = new Thread(new ParameterizedThreadStart(StartThreadHttp));
            DownloadJobInfo dji    = new DownloadJobInfo
            {
                uri      = uri,
                path     = path,
                filename = filename,
                dt       = DownloadType.HTTP,
                isFugai  = isFugai
            };

            thread.Name = dji.ToString();
            DownloadPercent.Add(dji, 0);
            Jobs.Add(thread);
            thread.Start(dji);
        }
コード例 #4
0
ファイル: Class1.cs プロジェクト: fan852654/Desktop-Pet
        private static void Ftpdownloadfile(object djiobj)
        {
            long            filelength = 0;
            DownloadJobInfo dji        = (DownloadJobInfo)djiobj;
            FtpWebRequest   request    = (FtpWebRequest)WebRequest.Create(dji.uri);

            filelength = dji.Length;
            try
            {
                request.Method      = WebRequestMethods.Ftp.DownloadFile;
                request.Credentials = new NetworkCredential(dji.username, dji.password);
                dji.Status          = "下载中...";
                using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
                {
                    using (Stream responseStream = response.GetResponseStream())
                    {
                        using (FileStream fs = new FileStream(Path.Combine(dji.path, dji.filename), FileMode.OpenOrCreate))
                        {
                            byte[] buffer   = new byte[102400];
                            int    read     = 0;
                            int    allready = 0;
                            do
                            {
                                read = responseStream.Read(buffer, 0, buffer.Length);
                                fs.Write(buffer, 0, read);
                                fs.Flush();
                                allready            += read;
                                DownloadPercent[dji] = int.Parse((long.Parse(allready.ToString()) / filelength * 100).ToString());
                            } while (!(read == 0));
                            fs.Flush();
                            fs.Close();
                        }
                    }
                }
                dji.Status = "已完成!";
            }
            catch (Exception ex)
            {
                dji.Status = "出现错误:" + ex.Message;
            }
        }
コード例 #5
0
ファイル: Class1.cs プロジェクト: fan852654/Desktop-Pet
        private static void StartThreadHttp(object obj)
        {
            DownloadJobInfo dji = (DownloadJobInfo)obj;
            WebClient       wc  = new WebClient();

            wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);
            wc.DownloadFileCompleted   += new AsyncCompletedEventHandler(wc_DownloadFileCompleted);
            wc.Proxy = WebRequest.DefaultWebProxy;
            WC_DJI_Map.Add(wc, dji);
            wc.DownloadFileAsync(dji.uri, Path.Combine(dji.path, dji.filename));
            while (WC_DJI_Map.ContainsKey(wc))
            {
                Thread.Sleep(new TimeSpan(0, 0, 5));
            }
            if (Jobs.SingleOrDefault(m => m.Name == dji.ToString()) != null)
            {
                Jobs.Remove(Jobs.SingleOrDefault(m => m.Name == dji.ToString()));
            }
            GC.Collect();
            return;
        }
コード例 #6
0
ファイル: Class1.cs プロジェクト: fan852654/Desktop-Pet
 public static int GetFileDownloadPercent(DownloadJobInfo dji)
 {
     return(DownloadPercent.SingleOrDefault(m => m.Key.filename == dji.filename && m.Key.path == dji.path && m.Key.uri.ToString() == dji.uri.ToString()).Value);
 }