скачанный файл с FTP как поток, не открывается как filestream? - PullRequest
0 голосов
/ 16 ноября 2018

Я использовал библиотеку fluentFTP, чтобы получить список файлов для загрузки (.csv) и выгрузки.

Сначала я подключаюсь, загружаю файл в объект Stream (принудительно) и затем сохраняю какнабор данных.

        ftpClient.Connect();
        var stream = ftpClient.OpenRead(filePath);
        var config = new ExcelDataSetConfiguration { ConfigureDataTable = _ => new ExcelDataTableConfiguration { UseHeaderRow = true } };
        IExcelDataReader excelReader = ExcelReaderFactory.CreateCsvReader(stream);

, когда excelReader пытается открыть объект Stream. Я получаю сообщение об ошибке ниже.Я предполагаю, потому что CreateCsvReader принимает объект FileStream, а не Stream.

System.InvalidOperationException: 'Operation is not valid due to the current state of the object.'

Я не вижу метода, который возвращает FileStream, я испорчен или есть способ конвертировать этот объект Stream в FileStream.загруженный файл - это файл .CSV

Могут ли я попробовать другие хорошие FTP-клиенты?Большинство моих соединений - SFTP, которые работают нормально, потому что SSH.NET предоставляет метод, который возвращает файловый поток.К сожалению, sftp не работает с ftp из-за совершенно другого протокола

1 Ответ

0 голосов
/ 16 ноября 2018

Посмотрите документацию FluentFTP и следуйте их примеру:

https://github.com/robinrodricks/FluentFTP/blob/master/FluentFTP.Examples/BeginOpenRead.cs

namespace Examples {
    public static class BeginOpenReadExample {
        static ManualResetEvent m_reset = new ManualResetEvent(false);

        public static void BeginOpenRead() {
            // The using statement here is OK _only_ because m_reset.WaitOne()
            // causes the code to block until the async process finishes, otherwise
            // the connection object would be disposed early. In practice, you
            // typically would not wrap the following code with a using statement.
            using (FtpClient conn = new FtpClient()) {
                m_reset.Reset();

                conn.Host = "localhost";
                conn.Credentials = new NetworkCredential("ftptest", "ftptest");
                conn.BeginOpenRead("/path/to/file",
                    new AsyncCallback(BeginOpenReadCallback), conn);

                m_reset.WaitOne();
                conn.Disconnect();
            }
        }

        static void BeginOpenReadCallback(IAsyncResult ar) {
            FtpClient conn = ar.AsyncState as FtpClient;

            try {
                if (conn == null)
                    throw new InvalidOperationException("The FtpControlConnection object is null!");

                using (Stream istream = conn.EndOpenRead(ar)) {
                    byte[] buf = new byte[8192];
                    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...