Note that there are some explanatory texts on larger screens.

plurals
  1. POC# BinaryReader "stream does not support seek operations"
    primarykey
    data
    text
    <p>I am trying to download files from an ftp server using C# and ftpwebrequest. I can get the bytes using BinaryReader, but when I try to read the stream using br.ReadBytes(int), I get an error that BinaryReader does not support seek operations. </p> <p>Does anyone know how best to read the bytes so I can write them to a file? </p> <p>Here's the full method:</p> <pre><code> public void DownloadFile(String fileName) { Logger.Info("starting to download file: " + fileName); try { var downloadFileRequest = (FtpWebRequest)WebRequest.Create(FtpServer + "//" + fileName); downloadFileRequest.Credentials = new NetworkCredential(FtpUsername,FtpPassword); downloadFileRequest.Method = WebRequestMethods.Ftp.DownloadFile; downloadFileRequest.UseBinary = true; ServicePoint sp = downloadFileRequest.ServicePoint; sp.ConnectionLimit = 2; Logger.Info("getting ftp response for download file for " + fileName); try { var downloadResponse = (FtpWebResponse)downloadFileRequest.GetResponse(); Logger.Info("getting ftp response stream for " + fileName); try { Stream downloadStream = downloadResponse.GetResponseStream(); Logger.Info("File Download status: {0}", downloadResponse.StatusDescription.Trim()); Logger.Info("getting binary reader for " + fileName); try { using ( var downloadReader = new BinaryReader(downloadStream)) { String destinationFilePath= Path.Combine(LocalFolder, fileName); Logger.Info("writing response stream to " + destinationFilePath); try { using (var downloadWriter = new BinaryWriter(System.IO.File.Open(destinationFilePath, FileMode.Create))) { downloadWriter.Write(downloadReader.ReadBytes((int)downloadStream.Length)); } Logger.Info("successfully saved " + destinationFilePath); } catch (Exception ex) { Logger.Info("could not save " + destinationFilePath+ " b/c: " + ex.Message); } } } catch (Exception ex) { Logger.Info("could not read " + fileName + " b/c: " + ex.Message); } } catch (Exception ex) { Logger.Info("could not open download stream for " + fileName + " b/c: " + ex.Message); } finally { downloadResponse.Close(); } } catch (Exception ex) { Logger.Info("could not get ftp response stream for " + fileName + " b/c: " + ex.Message); } } catch (Exception ex) { Logger.Info("could not get ftp request stream for " + fileName + " b/c: " + ex.Message); } } </code></pre> <p>This runs as part of an ongoing service, so I don't want to throw errors that would stop the service. Instead, I'm writing to a log. Here are the contents of the log for this method:</p> <pre><code>2009-10-07 16:33:29.1421|INFO|xxx.Web.Controllers.FtpController|starting to download file: 2009-10-06155728Z_metadata.txt 2009-10-07 16:33:29.1421|INFO|xxx.Web.Controllers.FtpController|getting ftp response for download file for 2009-10-06155728Z_metadata.txt 2009-10-07 16:33:29.6661|INFO|xxx.Web.Controllers.FtpController|getting ftp response stream for 2009-10-06155728Z_metadata.txt 2009-10-07 16:33:29.6661|INFO|xxx.Web.Controllers.FtpController|File Download status: 125 Data connection already open; Transfer starting. 2009-10-07 16:33:29.6721|INFO|xxx.Web.Controllers.FtpController|getting binary reader for 2009-10-06155728Z_metadata.txt 2009-10-07 16:33:29.6721|INFO|xxx.Web.Controllers.FtpController|writing response stream to C:\\Resumes\\2009-10-06155728Z_metadata.txt 2009-10-07 16:33:29.6951|INFO|xxx.Web.Controllers.FtpController|could not save C:\\Resumes\\2009-10-06155728Z_metadata.txt b/c: This stream does not support seek operations. </code></pre> <p>I've been working on this way too long, so any help would be appreciated!</p> <p>Thanks!!</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload