/// <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 PcsFileInfo(NativePcsFileInfo fi) { this.fs_id = fi.fs_id; this.path = NativeUtils.utf8_str(fi.path); this.server_filename = NativeUtils.utf8_str(fi.server_filename); this.server_ctime = fi.server_ctime; this.server_mtime = fi.server_mtime; this.local_ctime = fi.local_ctime; this.local_mtime = fi.local_mtime; this.size = fi.size; this.category = fi.category; this.isdir = fi.isdir; this.dir_empty = fi.dir_empty; this.empty = fi.empty; this.md5 = NativeUtils.utf8_str(fi.md5); this.dlink = NativeUtils.utf8_str(fi.dlink); this.block_list = null; if (fi.block_list != IntPtr.Zero) { List<string> list = new List<string>(); for (int i = 0; ; i++) { IntPtr p = Marshal.ReadIntPtr(fi.block_list, i * Marshal.SizeOf(typeof(IntPtr))); if (p != IntPtr.Zero) { list.Add(NativeUtils.utf8_str(p)); } else { break; } } this.block_list = list.ToArray(); } this.ifhassubdir = fi.ifhassubdir; this.user_flag = fi.user_flag; }