Загрузка файла в ftp добавляет ненужные (мусорные) символы в конце этого файла - PullRequest
2 голосов
/ 29 марта 2012

Я пытаюсь сохранить XML-документ в потоковом режиме, изменить его и сохранить файл на ftp. Но после всех этих шагов в конце файла я получаю такие мусорные символы, как 㼼 浸  敶 獲 潩 㵮 ㄢ ... Где проблема?

XmlDocument xmlD = (XmlDocument)xmlDocument.Clone();
byte[] fileContents = Encoding.Default.GetBytes(xmlD.OuterXml);
//ftpWReqUpload - FtpWebRequest to upload file
Stream requestStream = ftpWReqUpload.GetRequestStream();
xmlD.Save(requestStream);
ftpWReqUpload.ContentLength = fileContents.Length;
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();

Ответы [ 2 ]

1 голос
/ 29 марта 2012

Из того, что я вижу, вы загружаете документ дважды. Сначала вы делаете xmlD.Save() для потока, который сохранит ваш документ в его исходной кодировке, затем вы записываете байтовый массив, полученный из того же документа, используя системную кодировку по умолчанию. Я подозреваю, что если вы просто сделаете что-то вроде:

XmlDocument xmlD = xmlDocument as XmlDocument;
Stream requestStream = ftpWReqUpload.GetRequestStream();
xmlD.Save(requestStream);
requestStream.Close();

это будет работать.

Редактировать: Я вижу, что @dasblinkenlight добавил ссылку на некоторый рабочий код в комментарии к вопросу, возможно, вы захотите взглянуть на это, чтобы получить представление о том, как обрабатывать ответ.

0 голосов
/ 29 марта 2012

Код, который я использую для загрузки файла через FTP, примерно такой же, но в нем нет строки

ftpWReqUpload.ContentLength = fileContents.Length;

MSDN говорит, что вы не должны использовать его в своем коде. Попробуйте без него.

...