public void Sync(string sourceDirectory, string targetDirectory) { var root = new DirectoryInfo(sourceDirectory).Name; var files = Directory.EnumerateFiles(sourceDirectory, "*.*", SearchOption.AllDirectories).ToList(); for (int i = 0; i < files.Count; i++) { var file = files[i]; var remoteFolder = Path.Combine(targetDirectory, new FileInfo(file).DirectoryName.Substring(file.IndexOf(root) + root.Length + 1)).Replace(@"\", "/"); if (!iPhone.CreateDirectory(remoteFolder)) { MessageBox.Show(string.Format("Create directory failed: {0}", remoteFolder)); } string remoteFile = Path.Combine(remoteFolder, Path.GetFileName(file)).Replace(@"\", "/"); ProgressChanged.RaiseEvent(this, new ProgressChangedEventArgs { NewProgress = (int)(((double)i / (double)files.Count) * 100.0), CurrentFile = remoteFile }); iPhone.CopyFile(file, remoteFile); } ProgressChanged.RaiseEvent(this, new ProgressChangedEventArgs { NewProgress = 100 }); SyncCompleted.RaiseEvent(this, new EventArgs()); }