FTP in C # returns a damaged file, why?

I have this way to transfer files using an FTP server:

private void TransferNeededFiles(IEnumerable<string> filenames)
{
    foreach (var filename in filenames)
    {
        var request = WebRequest.Create(new Uri(@"ftp://{0}/{1}".Fill(Config.ServerUri, filename))) as FtpWebRequest;

        if (request != null)
        {
            request.Credentials = new NetworkCredential(Config.Username, Config.Password);

            request.Method = WebRequestMethods.Ftp.DownloadFile;
            using (var streamReader = new StreamReader(request.GetResponse().GetResponseStream()))
            {
                var fileStream = new FileStream(@"{0}/{1}".Fill(Config.DestinationFolderPath, filename), FileMode.Create);

                var writer = new StreamWriter(fileStream);
                writer.Write(streamReader.ReadToEnd());
                writer.Flush();
                writer.Close();

                fileStream.Close();
            }
        }
    }
}

The .gz file included in the list of file names is always corrupt. When I try to copy the ftp file using Windows Explorer, the file will not be corrupted. Do you know what is going on?

+3
source share
2 answers

The problem is this line:

writer.Write(streamReader.ReadToEnd());

StreamReader.ReadToEnd()returns a Unicode encoded string. You want something that will read the stream byte for the byte.

+7
source

Reader Writer Unicode. , , Stream s. , :

BufferedStream inputStream, outputStream;
byte[] buffer = new byte[4096];
int bytesRead;

while ((bytesRead = inputStream.Read(buffer)) > 0)
{
    outputStream.Write(buffer, 0, bytesRead);
}

, , .

+3

Source: https://habr.com/ru/post/1713101/


All Articles