private void ProcessDirectoryRestore(VolumeSnapshotDirectory sourceDir, BaseArchive archive, int relativePathStartIndex, string targetDir) { if (!mOperation.CanContinue) { return; } PWLib.Platform.Windows.Directory.CreateDirectory(targetDir); foreach (VolumeSnapshotFile fileEntry in sourceDir.Files) { try { string outDir = targetDir + fileEntry.RelativePath.Substring(relativePathStartIndex); archive.RestoreFile(fileEntry.Revision, fileEntry.RelativePath, outDir, new ArchiveFileDelegate(Restore_ArchiveStoreFile), fileEntry); ulong runningSize = mFilesTotalSizeRunning + fileEntry.FileSize; if (runningSize > mFilesTotalSize) { runningSize = mFilesTotalSize; } if (Progress != null) { Progress(mFileRunningCount + 1, mFileTotalCount, runningSize, mFilesTotalSize); } } catch (System.Exception e) { if (Error != null) { Error("Restore file failed '" + fileEntry.RelativePath + "'", e); } } if (!mOperation.CanContinue) { return; } mFileRunningCount++; mFilesTotalSizeRunning += fileEntry.FileSize; } foreach (VolumeSnapshotDirectory directoryEntry in sourceDir.Directories) { ProcessDirectoryRestore(directoryEntry, archive, relativePathStartIndex, targetDir); if (!mOperation.CanContinue) { return; } } }
private void ProcessDirectoryRestore( VolumeSnapshotDirectory sourceDir, BaseArchive archive, int relativePathStartIndex, string targetDir ) { if ( !mOperation.CanContinue ) return; PWLib.Platform.Windows.Directory.CreateDirectory( targetDir ); foreach ( VolumeSnapshotFile fileEntry in sourceDir.Files ) { try { string outDir = targetDir + fileEntry.RelativePath.Substring( relativePathStartIndex ); archive.RestoreFile( fileEntry.Revision, fileEntry.RelativePath, outDir, new ArchiveFileDelegate( Restore_ArchiveStoreFile ), fileEntry ); ulong runningSize = mFilesTotalSizeRunning + fileEntry.FileSize; if ( runningSize > mFilesTotalSize ) runningSize = mFilesTotalSize; if ( Progress != null ) Progress( mFileRunningCount + 1, mFileTotalCount, runningSize, mFilesTotalSize ); } catch ( System.Exception e ) { if ( Error != null ) Error( "Restore file failed '" + fileEntry.RelativePath + "'", e ); } if ( !mOperation.CanContinue ) return; mFileRunningCount++; mFilesTotalSizeRunning += fileEntry.FileSize; } foreach ( VolumeSnapshotDirectory directoryEntry in sourceDir.Directories ) { ProcessDirectoryRestore( directoryEntry, archive, relativePathStartIndex, targetDir ); if ( !mOperation.CanContinue ) return; } }