private void CopyAttachment(List _srcLst, List _dList, int _itemID, string _folder) { string _tmpfolder = ""; if (String.IsNullOrEmpty(StartingFolder)) { _tmpfolder = _folder.Replace((_srcLst.RootFolder.ServerRelativeUrl), _dList.RootFolder.ServerRelativeUrl); } else { string _tmpSeed = _dList.RootFolder.ServerRelativeUrl + "/" + StartingFolder; _tmpfolder = _folder.Replace((_srcLst.RootFolder.ServerRelativeUrl), _tmpSeed); } LogVerbose("Copying: Items in " + _itemID + " To " + _tmpfolder); LogVerbose("Source file: " + _srcLst.RootFolder.ServerRelativeUrl + "/Attachments/" + _itemID); try { Folder _aFolder = this.ClientContext.Web.GetFolderByServerRelativeUrl(_srcLst.RootFolder.ServerRelativeUrl + "/Attachments/" + _itemID); try { this.ClientContext.Load(_aFolder); this.ClientContext.ExecuteQuery(); } catch (ServerException ex) { LogError(ex, "No attachments for ListItem {0}", ex.Message); LogWarning("No Attachment for ID {0}", _itemID); return; } FileCollection _files = _aFolder.Files; this.ClientContext.Load(_files); this.ClientContext.ExecuteQuery(); foreach (var _file in _files) { try { string _tmpFileName = HelperExtensions.GetCleanFileName(_file.Name); string url = _tmpfolder + "/" + _tmpFileName; LogVerbose("Filename: " + _file.Name); if (this.ShouldProcess(string.Format("Will upload local file {0} to url {1}", _file.Name, url))) { LogVerbose("_tmpfolder: {0} _tmpFileName: {1} with new file url: {2}" + _tmpfolder, _tmpFileName, url); var fileRelativeUrl = _file.ServerRelativeUrl.ToString(); var fileNameFromInfo = System.IO.Path.GetFileName(fileRelativeUrl); var doclibfilename = string.Format("{0}\\{1}", _resultLogDirectory, fileNameFromInfo); // read file from attachment pool FileInformation fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(this.ClientContext, fileRelativeUrl); this.ClientContext.ExecuteQueryRetry(); // write binary to file using (var fileStream = new System.IO.FileStream(doclibfilename, System.IO.FileMode.Create)) { fileInfo.Stream.CopyTo(fileStream); } // read file from disk into memorystream and upload using (var ms = new System.IO.MemoryStream(System.IO.File.ReadAllBytes(doclibfilename))) { Microsoft.SharePoint.Client.File.SaveBinaryDirect(this.ClientContext, url, ms, false); this.ClientContext.ExecuteQuery(); } Thread.Sleep(500); } } catch (Exception e) { LogError(e, ">>>>>> {0}", e.Message); } } } catch (Exception e) { LogError(e, ">>>>>> copyAttachment - {0}", e.Message); } }