/// <summary> /// Method to upload a folder /// </summary> /// <param name="protocol"></param> /// <returns></returns> private bool UploadFolder(IProtocol protocol) { var uploaded = true; var localParentDirectory = PortablePath.GetParentDirectory(Source); var remoteParentDirectory = PortablePath.GetParentDirectory(Destination); var foldersToProcess = new Queue <string>(); foldersToProcess.Enqueue(Source); while (foldersToProcess.Count > 0) { var folderToPress = foldersToProcess.Dequeue(); //Create the folder protocol.CreateDirectory(PortablePath.ReplaceAndNormalize(folderToPress, localParentDirectory, remoteParentDirectory)); //Upload folder files var filesToProcess = Directory.GetFiles(folderToPress); foreach (var file in filesToProcess) { uploaded = uploaded && protocol.UploadFile(file, PortablePath.ReplaceAndNormalize(file, localParentDirectory, remoteParentDirectory)); } //Enqueue subfolders var subFolders = Directory.GetDirectories(folderToPress); foreach (var folder in subFolders) { foldersToProcess.Enqueue(folder); } } return(uploaded); }