joshrduncan2012 Ответов: 1

C# - загрузка файлов через FTP


Всем привет!

Я работаю над элементом проекта, который связан с загрузкой файлов по FTP. Это код, который я должен загрузить для всех типов файлов.

#region FTP Upload
// Get the object used to communicate with the server.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpSite + Path.GetFileName(newFile));
request.Method = WebRequestMethods.Ftp.UploadFile;

request.Credentials = new NetworkCredential(ftpUserNameTextBox.Text.Trim(), ftpPasswordTextBox.Text.Trim());

// Copy the contents of the file to the request stream.
StreamReader sourceStream = null;

sourceStream = new StreamReader("where-file-is-stored" + newFile);

byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
request.KeepAlive = true;
request.ReadWriteTimeout = 1200000; // 20 minutes
sourceStream.Close();
request.ContentLength = fileContents.Length;

Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();

FtpWebResponse response = (FtpWebResponse)request.GetResponse();

response.Close();
#endregion


Все типы файлов, кажется, в порядке, если я повторно загружаю их после загрузки. Однако если я загружаю файл. sdf (SQL Server CE) после того, как он загружен с этим кодом, он, похоже, повреждается. Есть ли параметр, который мне не хватает, чтобы эти типы файлов не были повреждены?

Всем огромное спасибо!

1 Ответов

Рейтинг:
12

Ron Beyer

Вы должны использовать BinaryReader вместо stream reader. Вы преобразуете все байты в UTF-8 и, вероятно, испортите все, что является двоичным, так как оно, вероятно, обнаруживает другую кодировку. С BinaryReader вам не нужно использовать кодировку. UTF8.GetBytes, просто используйте методы на считывателе, чтобы прочитать необработанные байты.


Sergey Alexandrovich Kryukov

Хорошая идея, 5. Использование FTP в текстовом режиме в наши дни встречается редко и редко имеет смысл.
—СА

joshrduncan2012

Очевидно, мне нужен был двоичный читатель. Спасибо, Рон!