Fields (1) Events (7) Methods (13) Properties (5)
Namespace: SchwabenCode.QuickIO.Transfer

Syntax

public class QuickIOTransferDirectoryCopyService : QuickIOTransferServiceBase

Basetype

Summary

Copy directory with progress monitoring

Example

Copy complete directory

static void Main( string[ ] args )
{
const string sourceDirectory = @"C:\transfer_test\source";
const string targetDirectory = @"C:\transfer_test\to";


// With observer
IQuickIOTransferObserver observer = new QuickIOTransferObserver( );
var service = new QuickIOTransferDirectoryCopyService( observer, new QuickIODirectoryInfo( sourceDirectory ), targetDirectory, threadCount: 1, retryCount: 3, searchOption: SearchOption.AllDirectories, overwrite: true );
// or without overload, to use default internal observer
// var service = new QuickIOTransferDirectoryCopyService( new QuickIODirectoryInfo( sourceDirectory ), targetDirectory, threadCount: 1, retryCount: 3, searchOption: SearchOption.AllDirectories, overwrite: true );

//  Progress information
service.Observer.DirectoryCreationError += ObserverOnDirectoryCreationError;
service.Observer.FileCopyStarted += OnFileCopyStarted;
service.Observer.FileCopyProgress += OnFileCopyProgress;
service.Observer.FileCopyFinished += OnFileCopyFinished;
service.Observer.FileCopyError += ObserverOnFileCopyError;
// Same as (observer events are called first!):
service.FileCopyStarted += OnFileCopyStarted;
service.FileCopyProgress += OnFileCopyProgress;
service.FileCopyFinished += OnFileCopyFinished;
service.FileCopyError += ObserverOnFileCopyError;

// Start progress
service.Start( ); // Blocks thread until finished

Console.WriteLine( "Finished" );
Console.ReadKey( );
}

private static void ObserverOnDirectoryCreationError( object sender, QuickIOTransferDirectoryCreationErrorEventArgs e )
{
Console.WriteLine( "Error: Dir create '" + e.TargetPath + "' failed: " + e.Exception.Message );
}

private static void ObserverOnFileCopyError( object sender, QuickIOTransferFileCopyErrorEventArgs e )
{
Console.WriteLine( "Error: " + e.SourcePath + " to " + e.TargetPath + ": " + e.Exception.Message );
}

private static void OnFileCopyStarted( object sender, QuickIOTransferFileCopyStartedEventArgs e )
{
Console.WriteLine( "Started: " + e.SourcePath + " to " + e.TargetPath + " (Bytes: " + e.TotalBytes + ")" );
}

private static void OnFileCopyFinished( object sender, QuickIOTransferFileCopyFinishedEventArgs e )
{
Console.WriteLine( "Finished: " + e.SourcePath + " - MB/s: " + ( e.BytesPerSecond / 1024.0 / 1024.0 ).ToString( "0.0" ) );
}

private static void OnFileCopyProgress( object sender, QuickIOTransferFileCopyProgressEventArgs e )
{
Console.WriteLine( "Progress: " + e.SourcePath + " - %: " + e.Percentage + " MB/s: " + ( e.BytesPerSecond / 1024.0 / 1024.0 ).ToString( "0.0" ) );
}

Uses

Fields

_running

thread safe indicator if copy is running

private  Boolean _running

Events

DirectoryCreated

This event is raised when a directory was created

public DirectoryCreated

DirectoryCreating

This event is raised before an upcoming directory creation operation is performed

public DirectoryCreating

DirectoryCreationError

This event is raised if directory creation operation fails

public DirectoryCreationError

FileCopyError

This event is raised if file copy operation fails

public FileCopyError

FileCopyFinished

This event is raised at the end of the file copy operation.

public FileCopyFinished

FileCopyProgress

This event is raised during a copy of a file. It provides current information such as progress, speed and estimated time.

public FileCopyProgress

FileCopyStarted

This event is triggered at the beginning of the file copy operation.

public FileCopyStarted

Methods

public void QuickIOTransferDirectoryCopyService(QuickIODirectoryInfo sourceDirectoryInfo, String targetFullName, Int32 threadCount, Int32 retryCount, SearchOption searchOption, Boolean overwrite)

Parameters

sourceDirectoryInfo

QuickIODirectoryInfo

Directory to copy

targetFullName

String

Target fullname

threadCount

Int32

Copy Worker Counts. Use 1 on local systems. Use >2 with SMB shares

retryCount

Int32

Count of retries before copy is broken

searchOption

SearchOption

SearchOptionof deepth to copy

overwrite

Boolean

true to overwrite existing files

Example

Copy complete directory

static void Main( string[ ] args )
{
const string sourceDirectory = @"C:\transfer_test\source";
const string targetDirectory = @"C:\transfer_test\to";


// With observer
IQuickIOTransferObserver observer = new QuickIOTransferObserver( );
var service = new QuickIOTransferDirectoryCopyService( observer, new QuickIODirectoryInfo( sourceDirectory ), targetDirectory, threadCount: 1, retryCount: 3, searchOption: SearchOption.AllDirectories, overwrite: true );
// or without overload, to use default internal observer
// var service = new QuickIOTransferDirectoryCopyService( new QuickIODirectoryInfo( sourceDirectory ), targetDirectory, threadCount: 1, retryCount: 3, searchOption: SearchOption.AllDirectories, overwrite: true );

//  Progress information
service.Observer.DirectoryCreationError += ObserverOnDirectoryCreationError;
service.Observer.FileCopyStarted += OnFileCopyStarted;
service.Observer.FileCopyProgress += OnFileCopyProgress;
service.Observer.FileCopyFinished += OnFileCopyFinished;
service.Observer.FileCopyError += ObserverOnFileCopyError;
// Same as (observer events are called first!):
service.FileCopyStarted += OnFileCopyStarted;
service.FileCopyProgress += OnFileCopyProgress;
service.FileCopyFinished += OnFileCopyFinished;
service.FileCopyError += ObserverOnFileCopyError;

// Start progress
service.Start( ); // Blocks thread until finished

Console.WriteLine( "Finished" );
Console.ReadKey( );
}

private static void ObserverOnDirectoryCreationError( object sender, QuickIOTransferDirectoryCreationErrorEventArgs e )
{
Console.WriteLine( "Error: Dir create '" + e.TargetPath + "' failed: " + e.Exception.Message );
}

private static void ObserverOnFileCopyError( object sender, QuickIOTransferFileCopyErrorEventArgs e )
{
Console.WriteLine( "Error: " + e.SourcePath + " to " + e.TargetPath + ": " + e.Exception.Message );
}

private static void OnFileCopyStarted( object sender, QuickIOTransferFileCopyStartedEventArgs e )
{
Console.WriteLine( "Started: " + e.SourcePath + " to " + e.TargetPath + " (Bytes: " + e.TotalBytes + ")" );
}

private static void OnFileCopyFinished( object sender, QuickIOTransferFileCopyFinishedEventArgs e )
{
Console.WriteLine( "Finished: " + e.SourcePath + " - MB/s: " + ( e.BytesPerSecond / 1024.0 / 1024.0 ).ToString( "0.0" ) );
}

private static void OnFileCopyProgress( object sender, QuickIOTransferFileCopyProgressEventArgs e )
{
Console.WriteLine( "Progress: " + e.SourcePath + " - %: " + e.Percentage + " MB/s: " + ( e.BytesPerSecond / 1024.0 / 1024.0 ).ToString( "0.0" ) );
}
public void QuickIOTransferDirectoryCopyService(IQuickIOTransferObserver observer, QuickIODirectoryInfo sourceDirectoryInfo, String targetFullName, Int32 threadCount, Int32 retryCount, SearchOption searchOption, Boolean overwrite)

Parameters

observer

IQuickIOTransferObserver

Observer

sourceDirectoryInfo

QuickIODirectoryInfo

Directory to copy

targetFullName

String

Target fullname

threadCount

Int32

Copy Worker Counts. Use 1 on local systems. Use >2 with SMB shares

retryCount

Int32

Count of retries before copy is broken

searchOption

SearchOption

SearchOptionof deepth to copy

overwrite

Boolean

true to overwrite existing files

Example

Copy complete directory

static void Main( string[ ] args )
{
const string sourceDirectory = @"C:\transfer_test\source";
const string targetDirectory = @"C:\transfer_test\to";


// With observer
IQuickIOTransferObserver observer = new QuickIOTransferObserver( );
var service = new QuickIOTransferDirectoryCopyService( observer, new QuickIODirectoryInfo( sourceDirectory ), targetDirectory, threadCount: 1, retryCount: 3, searchOption: SearchOption.AllDirectories, overwrite: true );
// or without overload, to use default internal observer
// var service = new QuickIOTransferDirectoryCopyService( new QuickIODirectoryInfo( sourceDirectory ), targetDirectory, threadCount: 1, retryCount: 3, searchOption: SearchOption.AllDirectories, overwrite: true );

//  Progress information
service.Observer.DirectoryCreationError += ObserverOnDirectoryCreationError;
service.Observer.FileCopyStarted += OnFileCopyStarted;
service.Observer.FileCopyProgress += OnFileCopyProgress;
service.Observer.FileCopyFinished += OnFileCopyFinished;
service.Observer.FileCopyError += ObserverOnFileCopyError;
// Same as (observer events are called first!):
service.FileCopyStarted += OnFileCopyStarted;
service.FileCopyProgress += OnFileCopyProgress;
service.FileCopyFinished += OnFileCopyFinished;
service.FileCopyError += ObserverOnFileCopyError;

// Start progress
service.Start( ); // Blocks thread until finished

Console.WriteLine( "Finished" );
Console.ReadKey( );
}

private static void ObserverOnDirectoryCreationError( object sender, QuickIOTransferDirectoryCreationErrorEventArgs e )
{
Console.WriteLine( "Error: Dir create '" + e.TargetPath + "' failed: " + e.Exception.Message );
}

private static void ObserverOnFileCopyError( object sender, QuickIOTransferFileCopyErrorEventArgs e )
{
Console.WriteLine( "Error: " + e.SourcePath + " to " + e.TargetPath + ": " + e.Exception.Message );
}

private static void OnFileCopyStarted( object sender, QuickIOTransferFileCopyStartedEventArgs e )
{
Console.WriteLine( "Started: " + e.SourcePath + " to " + e.TargetPath + " (Bytes: " + e.TotalBytes + ")" );
}

private static void OnFileCopyFinished( object sender, QuickIOTransferFileCopyFinishedEventArgs e )
{
Console.WriteLine( "Finished: " + e.SourcePath + " - MB/s: " + ( e.BytesPerSecond / 1024.0 / 1024.0 ).ToString( "0.0" ) );
}

private static void OnFileCopyProgress( object sender, QuickIOTransferFileCopyProgressEventArgs e )
{
Console.WriteLine( "Progress: " + e.SourcePath + " - %: " + e.Percentage + " MB/s: " + ( e.BytesPerSecond / 1024.0 / 1024.0 ).ToString( "0.0" ) );
}
private InternalDirectoryTransferPrefences DetermineDirectoryTransferPrefences(QuickIODirectoryInfo sourceDirectoryInfo, String targetFullName, SearchOption searchOption, Boolean overwrite)
public virtual void OnDirectoryCreated(QuickIOTransferDirectoryCreatedEventArgs args)

Parameters

args

QuickIOTransferDirectoryCreatedEventArgs

Holds further event information

public virtual void OnDirectoryCreating(QuickIOTransferDirectoryCreatingEventArgs args)

Parameters

args

QuickIOTransferDirectoryCreatingEventArgs

Holds further event information

public virtual void OnDirectoryCreationError(QuickIOTransferDirectoryCreationErrorEventArgs args)

Parameters

args

QuickIOTransferDirectoryCreationErrorEventArgs

Holds further event information

public virtual void OnFileCopyError(QuickIOTransferFileCopyErrorEventArgs args)

Parameters

args

QuickIOTransferFileCopyErrorEventArgs

Holds further event information

public virtual void OnFileCopyFinished(QuickIOTransferFileCopyFinishedEventArgs args)

Parameters

args

QuickIOTransferFileCopyFinishedEventArgs

Holds further event information

public virtual void OnFileCopyProgress(QuickIOTransferFileCopyProgressEventArgs args)

Parameters

args

QuickIOTransferFileCopyProgressEventArgs

Holds further event information

public virtual void OnFileCopyStarted(QuickIOTransferFileCopyStartedEventArgs args)

Parameters

args

QuickIOTransferFileCopyStartedEventArgs

Holds further event information

RegisterInternalEventHandling()

Copy events from observer to current instance

private void RegisterInternalEventHandling()

Start()

Starts the copy process. First it determines all content information of source. Then the target directory structure will be created before transfer begins

public void Start()

StartAsync()

Starts the copy process as task. First it determines all content information of source. Then the target directory structure will be created before transfer begins

public Task StartAsync()

Properties

IsRunning

true if copy process is running

public Boolean IsRunning { get; set; }

Overwrite

true to overwrite existing content

public Boolean Overwrite { get; set; }

SearchOption

Deepth to copy

public SearchOption SearchOption { get; set; }

SourceDirectoryInfo

Directory to copy

public QuickIODirectoryInfo SourceDirectoryInfo { get; set; }

TargetFullName

Target fullname

public String TargetFullName { get; set; }

Classdiagram

public classQuickIOTransferDirectoryCopyService_runningDirectoryCreatedDirectoryCreatingDirectoryCreationErrorFileCopyErrorFileCopyFinishedFileCopyProgressFileCopyStartedDetermineDirectoryTransferPrefencesOnDirectoryCreatedOnDirectoryCreatingOnDirectoryCreationErrorOnFileCopyErrorOnFileCopyFinishedOnFileCopyProgressOnFileCopyStartedRegisterInternalEventHandlingStartStartAsyncQuickIOTransferDirectoryCopyServiceQuickIOTransferDirectoryCopyServiceIsRunning { get; set; }Overwrite { get; set; }SearchOption { get; set; }SourceDirectoryInfo { get; set; }TargetFullName { get; set; }public classQuickIOTransferServiceBase_jobQueue_jobQueueLock_maxBufferSize_maxJobRetryAttempts_maxWorkerCount_workerCountRemoveRequested_workerCountRemoveRequestedLock_workerShutdownLock_workerThreads_workerThreadsLockCancellationRequestedCompletedAddingRequestedJobDequeuedJobEnqueuedJobRequeuedJobRetryMaxReachedWorkerCreatedWorkerIsWaitingWorkerPickedJobWorkerShutdownWorkerStartedWorkerWokeUpAddWorkerCancelClearCompleteAddingCreateWorkersInternalAddInternalAddRangeInternalCreateNewWorkerInternalReSortLockedQueueInternalStartWorkerInternalWaitForNewQueueItemsJobExecuteSwitchOnCancellationRequestedOnCompletedAddingRequestedOnJobDequeuedOnJobEnqueuedOnJobRequeuedOnJobRetryMaxReachedOnWorkerCreatedOnWorkerIsWaitingOnWorkerPickedJobOnWorkerShutdownOnWorkerStartedOnWorkerWokeUpRemoveThreadRemoveWorkerStartConsumingStartWorkersStartWorkingWaitForFinishWakeUpSleepingWorkersQuickIOTransferServiceBaseQuickIOTransferServiceBaseAddingCompleted { get; set; }CancelRequested { get; set; }IsWorking { get; }MaxBufferSize { get; set; }MaxJobRetryAttempts { get; set; }MaxWorkerCount { get; set; }Observer { get; set; }PriorityComparer { get; set; }WorkerCount { get; }public static classQuickIODirectoryAddAttributeAddAttributeAddAttributeAddAttributeAsyncAddAttributeAsyncAddAttributeAsyncCompressCompressCompressAsyncCompressAsyncCopyCopyCopyAsyncCopyAsyncCreateCreateCreateAsyncCreateAsyncDeleteDeleteDeleteAsyncDeleteAsyncEnumerateDirectoriesEnumerateDirectoriesEnumerateDirectoriesEnumerateDirectoriesAsyncEnumerateDirectoriesAsyncEnumerateDirectoriesAsyncEnumerateDirectoryPathsEnumerateDirectoryPathsEnumerateDirectoryPathsEnumerateDirectoryPathsAsyncEnumerateDirectoryPathsAsyncEnumerateDirectoryPathsAsyncEnumerateFilePathsEnumerateFilePathsEnumerateFilePathsEnumerateFilePathsAsyncEnumerateFilePathsAsyncEnumerateFilePathsAsyncEnumerateFilesEnumerateFilesEnumerateFilesEnumerateFilesAsyncEnumerateFilesAsyncEnumerateFilesAsyncEnumerateFileSystemEntriesEnumerateFileSystemEntriesEnumerateFileSystemEntriesEnumerateFileSystemEntriesAsyncEnumerateFileSystemEntriesAsyncEnumerateFileSystemEntriesAsyncEnumerateFileSystemEntryPathsEnumerateFileSystemEntryPathsEnumerateFileSystemEntryPathsEnumerateFileSystemEntryPathsAsyncEnumerateFileSystemEntryPathsAsyncEnumerateFileSystemEntryPathsAsyncExistsExistsExistsExistsAsyncExistsAsyncExistsAsyncGetAttributesGetAttributesGetAttributesGetAttributesAsyncGetAttributesAsyncGetAttributesAsyncGetCreationTimeGetCreationTimeGetCreationTimeGetCreationTimeAsyncGetCreationTimeAsyncGetCreationTimeAsyncGetCreationTimeUtcGetCreationTimeUtcGetCreationTimeUtcGetCreationTimeUtcAsyncGetCreationTimeUtcAsyncGetCreationTimeUtcAsyncGetDirectoryRootGetDirectoryRootGetDirectoryRootGetDirectoryRootAsyncGetDirectoryRootAsyncGetDirectoryRootAsyncGetLastAccessTimeGetLastAccessTimeGetLastAccessTimeGetLastAccessTimeAsyncGetLastAccessTimeAsyncGetLastAccessTimeAsyncGetLastAccessTimeUtcGetLastAccessTimeUtcGetLastAccessTimeUtcGetLastAccessTimeUtcAsyncGetLastAccessTimeUtcAsyncGetLastAccessTimeUtcAsyncGetLastWriteTimeGetLastWriteTimeGetLastWriteTimeGetLastWriteTimeAsyncGetLastWriteTimeAsyncGetLastWriteTimeAsyncGetLastWriteTimeUtcGetLastWriteTimeUtcGetLastWriteTimeUtcGetLastWriteTimeUtcAsyncGetLastWriteTimeUtcAsyncGetLastWriteTimeUtcAsyncGetMetadastaAsyncGetMetadataGetMetadataGetMetadataGetMetadataAsyncGetMetadataAsyncGetMetadataAsyncGetStatisticsGetStatisticsGetStatisticsGetStatisticsAsyncGetStatisticsAsyncGetStatisticsAsyncInternalDirectoryExistsMoveMoveAsyncRemoveAttributeRemoveAttributeRemoveAttributeRemoveAttributeAsyncRemoveAttributeAsyncRemoveAttributeAsyncSetAllFileTimesSetAllFileTimesSetAllFileTimesSetAllFileTimesAsyncSetAllFileTimesAsyncSetAllFileTimesAsyncSetAllFileTimesUtcSetAllFileTimesUtcSetAllFileTimesUtcSetAllFileTimesUtcAsyncSetAllFileTimesUtcAsyncSetAllFileTimesUtcAsyncSetAttributesSetAttributesSetAttributesSetAttributesAsyncSetAttributesAsyncSetAttributesAsyncSetCreationTimeSetCreationTimeSetCreationTimeSetCreationTimeAsyncSetCreationTimeAsyncSetCreationTimeAsyncSetCreationTimeUtcSetCreationTimeUtcSetCreationTimeUtcSetCreationTimeUtcAsyncSetCreationTimeUtcAsyncSetCreationTimeUtcAsyncSetLastAccessTimeSetLastAccessTimeSetLastAccessTimeSetLastAccessTimeAsyncSetLastAccessTimeAsyncSetLastAccessTimeAsyncSetLastAccessTimeUtcSetLastAccessTimeUtcSetLastAccessTimeUtcSetLastAccessTimeUtcAsyncSetLastAccessTimeUtcAsyncSetLastAccessTimeUtcAsyncSetLastWriteTimeSetLastWriteTimeSetLastWriteTimeSetLastWriteTimeAsyncSetLastWriteTimeAsyncSetLastWriteTimeAsyncSetLastWriteTimeUtcSetLastWriteTimeUtcSetLastWriteTimeUtcSetLastWriteTimeUtcAsyncSetLastWriteTimeUtcAsyncSetLastWriteTimeUtcAsyncpublic classQuickIOTransferServiceBase_jobQueue_jobQueueLock_maxBufferSize_maxJobRetryAttempts_maxWorkerCount_workerCountRemoveRequested_workerCountRemoveRequestedLock_workerShutdownLock_workerThreads_workerThreadsLockCancellationRequestedCompletedAddingRequestedJobDequeuedJobEnqueuedJobRequeuedJobRetryMaxReachedWorkerCreatedWorkerIsWaitingWorkerPickedJobWorkerShutdownWorkerStartedWorkerWokeUpAddWorkerCancelClearCompleteAddingCreateWorkersInternalAddInternalAddRangeInternalCreateNewWorkerInternalReSortLockedQueueInternalStartWorkerInternalWaitForNewQueueItemsJobExecuteSwitchOnCancellationRequestedOnCompletedAddingRequestedOnJobDequeuedOnJobEnqueuedOnJobRequeuedOnJobRetryMaxReachedOnWorkerCreatedOnWorkerIsWaitingOnWorkerPickedJobOnWorkerShutdownOnWorkerStartedOnWorkerWokeUpRemoveThreadRemoveWorkerStartConsumingStartWorkersStartWorkingWaitForFinishWakeUpSleepingWorkersQuickIOTransferServiceBaseQuickIOTransferServiceBaseAddingCompleted { get; set; }CancelRequested { get; set; }IsWorking { get; }MaxBufferSize { get; set; }MaxJobRetryAttempts { get; set; }MaxWorkerCount { get; set; }Observer { get; set; }PriorityComparer { get; set; }WorkerCount { get; }

save

reset

Drag to pan - Use Mousewheel + Ctrl to zoom