public class QuickIOTransferDirectoryCopyService : QuickIOTransferServiceBase
Copy directory with progress monitoring
Copy complete directory
class Program
{
static void Main( string[ ] args )
{
const string sourceDirectory = @"C:\transfer_test\source";
const string targetDirectory = @"C:\transfer_test\to";
var service = new QuickIOTransferDirectoryCopyService( new QuickIODirectoryInfo( sourceDirectory ), targetDirectory, threadCount: 1, retryCount: 3, searchOption: SearchOption.AllDirectories, overwrite: true );
// Progress information
service.Started += OnFileCopyStarted;
service.Progress += OnFileProgressUpdate;
service.Finished += OnFileCopyFinished;
// Start progress
service.Start( ); // Blocks thread until finished
Console.WriteLine( "Finished" );
Console.ReadKey( );
}
static void OnFileCopyFinished( object sender, QuickIOTransferFileCopyFinishedArgs e )
{
Console.WriteLine( "Finished: " + e.SourcePath + " - MB/s: " + ( e.BytesPerSecond / 1024.0 / 1024.0 ).ToString( "0.0" ) );
}
static void OnFileCopyStarted( object sender, QuickIOTransferFileCopyStartedArgs e )
{
Console.WriteLine( "Started: " + e.SourcePath + " to " + e.TargetPath + " (Bytes: " + e.TotalBytes + ")" );
}
static void OnFileProgressUpdate( object sender, QuickIOTransferFileCopyProgressArgs e )
{
Console.WriteLine( "Progress: " + e.SourcePath + " - %: " + e.Percentage + " MB/s: " + ( e.BytesPerSecond / 1024.0 / 1024.0 ).ToString( "0.0" ) );
}
}
_running
thread safe indicator if copy is running
private Boolean _running
QuickIOTransferDirectoryCopyService(QuickIODirectoryInfo sourceDirectoryInfo, String targetFullName, Int32 threadCount, Int32 retryCount, SearchOption searchOption, Boolean overwrite)
Creates new instance of QuickIOTransferDirectoryCopyService with default observer
public void QuickIOTransferDirectoryCopyService(QuickIODirectoryInfo sourceDirectoryInfo, String targetFullName, Int32 threadCount, Int32 retryCount, SearchOption searchOption, Boolean overwrite)
Parameters
sourceDirectoryInfo
QuickIODirectoryInfoDirectory to copy
targetFullName
StringTarget fullname
threadCount
Int32Copy Worker Counts. Use 1 on local systems. Use >2 with SMB shares
retryCount
Int32Count of retries before copy is broken
searchOption
SearchOptionSearchOptionof deepth to copy
overwrite
Booleantrue to overwrite existing files
QuickIOTransferDirectoryCopyService(IQuickIOTransferObserver observer, QuickIODirectoryInfo sourceDirectoryInfo, String targetFullName, Int32 threadCount, Int32 retryCount, SearchOption searchOption, Boolean overwrite)
Creates new instance of QuickIOTransferDirectoryCopyService with specified observer
public void QuickIOTransferDirectoryCopyService(IQuickIOTransferObserver observer, QuickIODirectoryInfo sourceDirectoryInfo, String targetFullName, Int32 threadCount, Int32 retryCount, SearchOption searchOption, Boolean overwrite)
Parameters
observer
IQuickIOTransferObserverObserver
sourceDirectoryInfo
QuickIODirectoryInfoDirectory to copy
targetFullName
StringTarget fullname
threadCount
Int32Copy Worker Counts. Use 1 on local systems. Use >2 with SMB shares
retryCount
Int32Count of retries before copy is broken
searchOption
SearchOptionSearchOptionof deepth to copy
overwrite
Booleantrue to overwrite existing files
private InternalDirectoryTransferPrefences DetermineDirectoryTransferPrefences(QuickIODirectoryInfo sourceDirectoryInfo, String targetFullName, SearchOption searchOption, Boolean overwrite)
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()
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; }