public static void Replicate(string sourcefileStorageName, string targetfileStorageName, ReplicateBehaviour replicateBehaviour, AddFileBehaviour addFileBehaviour, FileStorageHandler.ExposeProgressDelegate exposeProgressDelegatePhase1, FileStorageHandler.ExposeProgressDelegate exposeProgressDelegatePhase2) { var sourceFileStorageHandler = FileStorageHandler.Open(sourcefileStorageName); switch (replicateBehaviour) { case ReplicateBehaviour.AddToExistingStorage: // // nothing to check here // break; case ReplicateBehaviour.ReplicateToNewStorage: // // ensure target does not yet exist // Create(targetfileStorageName, CreateFileStorageBehaviour.ThrowExceptionWhenExists); break; default: throw new NotSupportedException(string.Format("Unsupported replicate behaviour {0}", replicateBehaviour)); } var targetFileStorageHandler = FileStorageHandler.Open(targetfileStorageName); // // open source streams // using (sourceFileStorageHandler.indexStream = FileStreamFactory.CreateFileStream(sourceFileStorageHandler.indexFilename, StreamStateBehaviour.OpenNewStreamForReading)) { using (sourceFileStorageHandler.dataStream = FileStreamFactory.CreateFileStream(sourceFileStorageHandler.dataFilename, StreamStateBehaviour.OpenNewStreamForReading)) { // // open target streams // using (targetFileStorageHandler.indexStream = FileStreamFactory.CreateFileStream(targetFileStorageHandler.indexFilename, StreamStateBehaviour.OpenNewStreamForReadingAndWriting)) { using (targetFileStorageHandler.dataStream = FileStreamFactory.CreateFileStream(targetFileStorageHandler.dataFilename, StreamStateBehaviour.OpenNewStreamForReadingAndWriting)) { var allIdentifiers = sourceFileStorageHandler.GetAllDataIdentifiersBasedUponFileStorageIndexFile(StreamStateBehaviour.UseExistingStream, exposeProgressDelegatePhase1); // // start replicate process // foreach (var dataIdentifier in allIdentifiers) { sourceFileStorageHandler.ExportToOtherFileStorage(dataIdentifier, targetFileStorageHandler, addFileBehaviour, StreamStateBehaviour.UseExistingStream, StreamStateBehaviour.UseExistingStream, StreamStateBehaviour.UseExistingStream, StreamStateBehaviour.UseExistingStream); if (exposeProgressDelegatePhase2 != null) { exposeProgressDelegatePhase2.Invoke(dataIdentifier); } } if (exposeProgressDelegatePhase2 != null) { exposeProgressDelegatePhase2.Invoke(true); } } } } } }
public static void Replicate(string sourcefileStorageName, string targetfileStorageName, ReplicateBehaviour replicateBehaviour, AddFileBehaviour addFileBehaviour, FileStorageHandler.ExposeProgressDelegate exposeProgressDelegatePhase1, FileStorageHandler.ExposeProgressDelegate exposeProgressDelegatePhase2) { FileStorageHandler sourceFileStorageHandler = FileStorageHandler.Open(sourcefileStorageName); switch (replicateBehaviour) { case ReplicateBehaviour.AddToExistingStorage: // // nothing to check here // break; case ReplicateBehaviour.ReplicateToNewStorage: // // ensure target does not yet exist // Create(targetfileStorageName, CreateFileStorageBehaviour.ThrowExceptionWhenExists); break; default: throw new NotSupportedException(string.Format("Unsupported replicate behaviour {0}", replicateBehaviour)); } FileStorageHandler targetFileStorageHandler = FileStorageHandler.Open(targetfileStorageName); // // open source streams // using (sourceFileStorageHandler.IndexStream = FileStreamFactory.CreateFileStream(sourceFileStorageHandler.IndexFilename, StreamStateBehaviour.OpenNewStreamForReading)) { using (sourceFileStorageHandler.DataStream = FileStreamFactory.CreateFileStream(sourceFileStorageHandler.DataFilename, StreamStateBehaviour.OpenNewStreamForReading)) { // // open target streams // using (targetFileStorageHandler.IndexStream = FileStreamFactory.CreateFileStream(targetFileStorageHandler.IndexFilename, StreamStateBehaviour.OpenNewStreamForReadingAndWriting)) { using (targetFileStorageHandler.DataStream = FileStreamFactory.CreateFileStream(targetFileStorageHandler.DataFilename, StreamStateBehaviour.OpenNewStreamForReadingAndWriting)) { List<Guid> allIdentifiers = sourceFileStorageHandler.GetAllDataIdentifiersBasedUponFileStorageIndexFile(StreamStateBehaviour.UseExistingStream, exposeProgressDelegatePhase1); // // start replicate process // foreach (Guid dataIdentifier in allIdentifiers) { sourceFileStorageHandler.ExportToOtherFileStorage(dataIdentifier, targetFileStorageHandler, addFileBehaviour, StreamStateBehaviour.UseExistingStream, StreamStateBehaviour.UseExistingStream, StreamStateBehaviour.UseExistingStream, StreamStateBehaviour.UseExistingStream); if (exposeProgressDelegatePhase2 != null) { exposeProgressDelegatePhase2.Invoke(dataIdentifier); } } if (exposeProgressDelegatePhase2 != null) { exposeProgressDelegatePhase2.Invoke(true); } } } } } }