public MultiThreadDownloader(BaiduPCS pcs, PcsFileInfo from, string to,
                              string workfolder, int threadCount, int minSliceSize = MIN_SLICE_SIZE)
     : base(pcs, from, to)
 {
     this.WorkFolder   = workfolder;
     this.ThreadCount  = threadCount;
     this.MinSliceSize = minSliceSize;
 }
Пример #2
0
 /// <summary>
 /// 从非托管空间中复制出文件列表
 /// </summary>
 /// <param name="listPtr"></param>
 /// <returns></returns>
 public static PcsFileInfo[] GetFileListFromPcsFileInfoListPtr(IntPtr listPtr)
 {
     if (listPtr == IntPtr.Zero)
         return null;
     NativePcsFileInfoList nlist = (NativePcsFileInfoList)Marshal.PtrToStructure(listPtr, typeof(NativePcsFileInfoList));
     PcsFileInfo[] r = new PcsFileInfo[nlist.count];
     IntPtr itemPtr = nlist.link;
     for (int i = 0; itemPtr != IntPtr.Zero && i < nlist.count; i++)
     {
         NativePcsFileInfoListItem item = (NativePcsFileInfoListItem)Marshal.PtrToStructure(itemPtr, typeof(NativePcsFileInfoListItem));
         NativePcsFileInfo nfi = (NativePcsFileInfo)Marshal.PtrToStructure(item.info, typeof(NativePcsFileInfo));
         PcsFileInfo fi = new PcsFileInfo(nfi);
         r[i] = fi;
         itemPtr = item.next;
     }
     return r;
 }
Пример #3
0
 private int CompareByFileModifyTime(PcsFileInfo x, PcsFileInfo y)
 {
     if (x.isdir && y.isdir)
     {
         return(0);
     }
     else if (x.isdir)
     {
         return(-1);
     }
     else if (y.isdir)
     {
         return(1);
     }
     else
     {
         return(x.server_mtime < y.server_mtime ? -1 : (x.server_mtime > y.server_mtime ? 1 : 0));
     }
 }
Пример #4
0
 private int CompareByFileType(PcsFileInfo x, PcsFileInfo y)
 {
     if (x.isdir && y.isdir)
     {
         return(0);
     }
     else if (x.isdir)
     {
         return(-1);
     }
     else if (y.isdir)
     {
         return(1);
     }
     else
     {
         return(string.Compare(Path.GetExtension(x.server_filename), Path.GetExtension(y.server_filename)));
     }
 }
Пример #5
0
 private int CompareByFileSize(PcsFileInfo x, PcsFileInfo y)
 {
     if (x.isdir && y.isdir)
     {
         return(0);
     }
     else if (x.isdir)
     {
         return(-1);
     }
     else if (y.isdir)
     {
         return(1);
     }
     else
     {
         return(x.size < y.size ? -1 : (x.size > y.size ? 1 : 0));
     }
 }
Пример #6
0
 private int CompareByFileName(PcsFileInfo x, PcsFileInfo y)
 {
     if (x.isdir && y.isdir)
     {
         return(string.Compare(x.server_filename, y.server_filename));
     }
     else if (x.isdir)
     {
         return(-1);
     }
     else if (x.isdir)
     {
         return(1);
     }
     else
     {
         return(string.Compare(x.server_filename, y.server_filename));
     }
 }
Пример #7
0
        /// <summary>
        /// 从非托管空间中复制出文件列表
        /// </summary>
        /// <param name="listPtr"></param>
        /// <returns></returns>
        public static PcsFileInfo[] GetFileListFromPcsFileInfoListPtr(IntPtr listPtr)
        {
            if (listPtr == IntPtr.Zero)
            {
                return(null);
            }
            NativePcsFileInfoList nlist = (NativePcsFileInfoList)Marshal.PtrToStructure(listPtr, typeof(NativePcsFileInfoList));

            PcsFileInfo[] r       = new PcsFileInfo[nlist.count];
            IntPtr        itemPtr = nlist.link;

            for (int i = 0; itemPtr != IntPtr.Zero && i < nlist.count; i++)
            {
                NativePcsFileInfoListItem item = (NativePcsFileInfoListItem)Marshal.PtrToStructure(itemPtr, typeof(NativePcsFileInfoListItem));
                NativePcsFileInfo         nfi  = (NativePcsFileInfo)Marshal.PtrToStructure(item.info, typeof(NativePcsFileInfo));
                PcsFileInfo fi = new PcsFileInfo(nfi);
                r[i]    = fi;
                itemPtr = item.next;
            }
            return(r);
        }
Пример #8
0
        public int Compare(object x, object y)
        {
            int          r, wt = Descending ? -1 : 1;
            ListViewItem xitem = (ListViewItem)x;
            ListViewItem yitem = (ListViewItem)y;

            if (xitem.Tag != null && yitem.Tag != null)
            {
                if ((xitem.Tag is PcsFileInfo) && (yitem.Tag is PcsFileInfo))
                {
                    PcsFileInfo xfi = (PcsFileInfo)xitem.Tag;
                    PcsFileInfo yfi = (PcsFileInfo)yitem.Tag;
                    switch (By)
                    {
                    case ComparerBy.FileName:
                        r = CompareByFileName(xfi, yfi);
                        break;

                    case ComparerBy.FileSize:
                        r = CompareByFileSize(xfi, yfi);
                        break;

                    case ComparerBy.FileType:
                        r = CompareByFileType(xfi, yfi);
                        break;

                    case ComparerBy.FileModifyTime:
                        r = CompareByFileModifyTime(xfi, yfi);
                        break;

                    default:
                        r = string.Compare(xitem.SubItems[Column].Text, yitem.SubItems[Column].Text);
                        break;
                    }
                    return(r * wt);
                }
            }

            return(wt * string.Compare(xitem.SubItems[Column].Text, yitem.SubItems[Column].Text));
        }
Пример #9
0
 public frmMetaInformation(PcsFileInfo fileInfo)
 {
     InitializeComponent();
     if (fileInfo.isdir)
     {
         txFileName.Text   = fileInfo.server_filename;
         txFileType.Text   = "Directory";
         txLocation.Text   = fileInfo.path;
         txSize.Text       = fileInfo.size.ToString() + "Bytes (" + Utils.HumanReadableSize(fileInfo.size) + ")";
         txCreateTime.Text = Utils.FromUnixTimeStamp(fileInfo.server_ctime).ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss");
         txModifyTime.Text = Utils.FromUnixTimeStamp(fileInfo.server_mtime).ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss");
         txMd5.Text        = fileInfo.md5;
     }
     else
     {
         txFileName.Text   = fileInfo.server_filename;
         txFileType.Text   = Path.GetExtension(fileInfo.server_filename);
         txLocation.Text   = fileInfo.path;
         txSize.Text       = fileInfo.size.ToString() + "Bytes (" + Utils.HumanReadableSize(fileInfo.size) + ")";
         txCreateTime.Text = Utils.FromUnixTimeStamp(fileInfo.server_ctime).ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss");
         txModifyTime.Text = Utils.FromUnixTimeStamp(fileInfo.server_mtime).ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss");
         txMd5.Text        = fileInfo.md5;
     }
 }
Пример #10
0
        /// <summary>
        /// 给出文件扩展名(.*),返回相应图标
        /// </summary>
        /// <param name="fileInfo"></param>
        /// <param name="isLarge"></param>
        /// <returns></returns>
        public static Icon GetIcon(PcsFileInfo fileInfo, bool isLarge)
        {
            if (fileInfo.IsEmpty || string.IsNullOrEmpty(fileInfo.server_filename))
            {
                return(GetUnknowTypeIcon(isLarge));
            }

            if (fileInfo.isdir)
            {
                return(GetFolderIcon(isLarge));
            }

            string ext = Path.GetExtension(fileInfo.server_filename);

            if (string.IsNullOrEmpty(ext))
            {
                return(GetUnknowTypeIcon(isLarge));
            }

            string key = "EXT_" + ext + "_" + isLarge;

            if (cache.ContainsKey(key))
            {
                return((Icon)cache[key]);
            }

            RegistryKey regVersion      = null;
            string      regFileType     = null;
            string      regIconString   = null;
            string      systemDirectory = Environment.SystemDirectory + "\\";

            try
            {
                //读系统注册表中文件类型信息
                regVersion = Registry.ClassesRoot.OpenSubKey(ext, true);
                if (regVersion != null)
                {
                    regFileType = regVersion.GetValue("") as string;
                    regVersion.Close();
                    regVersion = Registry.ClassesRoot.OpenSubKey(regFileType + @"\DefaultIcon", true);
                    if (regVersion != null)
                    {
                        regIconString = regVersion.GetValue("") as string;
                        regVersion.Close();
                    }
                }
            }
            catch { }

            Icon resultIcon = GetIcon(regIconString, isLarge);

            if (resultIcon != null)
            {
                cache.Add(key, resultIcon);
                return(resultIcon);
            }

            //后缀不是 ".exe", 返回未知文件类型的图标
            if (!string.Equals(ext, ".exe", StringComparison.InvariantCultureIgnoreCase))
            {
                return(GetUnknowTypeIcon(isLarge));
            }

            return(GetDefaultExeTypeIcon(isLarge));
        }
Пример #11
0
 public Downloader(BaiduPCS pcs, PcsFileInfo from, string to)
 {
     this.pcs  = pcs;
     this.from = from;
     this.to   = to;
 }