Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Renci.SshNet.Sftp : SftpClient AppendAllText does not work for complex file types such as .docx or .xlsx #1312

Open
mcaupybugs opened this issue Feb 10, 2024 · 3 comments

Comments

@mcaupybugs
Copy link

I have two scenarios to consider.

  1. I have been trying to use the appendAllText functionality of the SftpClient to append two .docx files. The steps I perform in sequence are -
  • I create a .docx file with some content "First docx".
  • I create another .docx file with the content "Second docx".
  • I read the second .docx file in bytes and then tried to append the content to the first file by providing the path of the first file. The issue is when I perform the append using the AppendAllText functionality, I end up corrupting the first docx file. It works well for file types such as .txt or .log but for complex file types such as .docx etc it fails.
  1. The second alternative I am trying is to open the file in a SftpFileStream using the sftpClient.Open method.
  • I open the file in the FileMode.Append mode and provide the file access as FileAccess.Write, which returns a SftpFileStream.
  • I open the second Docx file in a memoryStream using using (var memoryStream = new MemoryStream(byteArrContent)) and use await memoryStream.CopyToAsync(sftpFileStream) to copy the bytes of the second docx to the first one. It also ends up corrupting the docx file.

I wanted to know if append functionality is not supported for such file types, or If I am missing something.

@Rob-Hague
Copy link
Collaborator

AppendAllText is not aware about file types. It is just appending the bytes of the input to the bytes of the file. I imagine you would get the same result with System.IO.File.AppendAllText.

If you need to manipulate .docx files, I recommend you play with Open XML SDK https://learn.microsoft.com/en-us/office/open-xml/open-xml-sdk

@WojciechNagorski
Copy link
Collaborator

@mcaupybugs can you prepare a failing integration test for the .docx file?

@darkoperator
Copy link

darkoperator commented Feb 22, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants