예제 #1
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);
        }
예제 #2
0
 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;
 }