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); }
public static extern Int32 RecoveryFile(IntPtr mountHandle, IntPtr newFileHandle, LpfnRecoveryFileProgressEx callback, ref FILE_RECOVERY_INFO recoveryFileInfo, ref CHECK_SUM_INFO cherckSumInfo);