Ejemplo n.º 1
0
        private bool RecoveryFile(FNodeX source, string savePath)
        {
            var node = source.Source;
            FILE_RECOVERY_INFO file = new FILE_RECOVERY_INFO();

            file.Attr         = node.FileAttribute;
            file.FileId       = node.FileId;
            file.OffSet       = node.OffsetBytes;
            file.OffsetSec    = node.OffsetSec;
            file.ParentFileId = node.ParentFileId;
            file.Size         = node.Size;

            CHECK_SUM_INFO check = new CHECK_SUM_INFO();

            int res = 0;

            IntPtr fileHandle = IntPtr.Zero;

            try
            {
                fileHandle = FileServiceCoreDll.CreateNewFile(savePath);

                res = FileServiceCoreDll.RecoveryFile(source.Mount, fileHandle, LpfnRecoveryFileProgressEx, ref file, ref check);

                if (0 != res)
                {
                    LoggerManagerSingle.Instance.Error(string.Format("提取文件时底层库FileServiceCoreDll.RecoveryFile失败!错误码:{0}", res));
                }
            }
            catch (Exception ex)
            {
                LoggerManagerSingle.Instance.Error("提取文件时底层库FileServiceCoreDll.RecoveryFile出现异常!", ex);
            }
            finally
            {
                if (IntPtr.Zero != fileHandle)
                {
                    FileServiceCoreDll.CloseDevice(fileHandle);
                }
            }

            return(res == 0);
        }
Ejemplo n.º 2
0
 public static extern Int32 RecoveryFile(IntPtr mountHandle, IntPtr newFileHandle, LpfnRecoveryFileProgressEx callback, ref FILE_RECOVERY_INFO recoveryFileInfo, ref CHECK_SUM_INFO cherckSumInfo);