public void UpdateDocument()
{ System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding(); SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite siteColl = new SPSite("")) { using (SPWeb web = siteColl.OpenWeb()) { try { SPFile spfile = web.GetFile(""); if (spfile.Exists) { byte[] byteArrayFileContentsBefore = spfile.OpenBinary(); if (byteArrayFileContentsBefore.Length > 0) { string strFileContentsBefore = enc.GetString(byteArrayFileContentsBefore); //convert byte array to string. string newStr = strFileContentsBefore.Replace(""); byte[] byteArrayFileContentsAfter = null; if (!newStr.Equals("")) { byteArrayFileContentsAfter = enc.GetBytes(newStr); spfile.SaveBinary(byteArrayFileContentsAfter); //save to the file. } } } } catch (Exception e) { } } } }); }
SPFile has a CopyFile method which can copy the file to a new location. But if there was an existing file on the new location, you can set the overwrite parameter to true to overwrite it. Here is a problem, supposingly there was a workflow already on the file in the new location... when you use CopyFile.. the workflow is lost.. basically it is not an update of the file.. it is infact a delete and re-adding of the file. The following code will overcome this problem
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | private void UpdateDocumentForERB_ExecuteCode(SPWeb web, string originalFileUrl, string targetFileUrl) { SPSecurity.RunWithElevatedPrivileges( delegate () { SPFile OriFile = web.GetFile(originalFileUrl); SPFile TarFile = web.GetFile(targetFileUrl); byte [] byteArrayOriFile = OriFile.OpenBinary(); TarFile.SaveBinary(byteArrayOriFile); }); } |
public void UpdateDocument() { System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding(); SPSecurity.RunWithElevatedPrivileges( delegate () { using (SPSite siteColl = new SPSite( "" )) { using (SPWeb web = siteColl.OpenWeb()) { try { SPFile spfile = web.GetFile( "" ); if (spfile.Exists) { byte [] byteArrayFileContentsBefore = spfile.OpenBinary(); if (byteArrayFileContentsBefore.Length > 0) { string strFileContentsBefore = enc.GetString(byteArrayFileContentsBefore); //convert byte array to string. string newStr = strFileContentsBefore + "This is the new text added" ; byte [] byteArrayFileContentsAfter = null ; if (!newStr.Equals( "" )) { byteArrayFileContentsAfter = enc.GetBytes(newStr); spfile.SaveBinary(byteArrayFileContentsAfter); //save to the file. } } } } catch (Exception e){} } } }); } |