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; }
/// <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; }
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)); } }
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))); } }
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)); } }
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)); } }
/// <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); }
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)); }
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; } }
/// <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)); }
public Downloader(BaiduPCS pcs, PcsFileInfo from, string to) { this.pcs = pcs; this.from = from; this.to = to; }