Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2014, 09:09   #1
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию Загрузка файла

Продолжаю играться, на этот раз с файлами.
Уважаемые, в чем может быть ошибка:

Код:
string FileTitle = response.ResponseUri.Segments[response.ResponseUri.Segments.Length - 1];
            FileTitle = FileTitle.Replace("%20", " ");

            byte[] b = new byte[(int)response.ContentLength];

            using (StreamReader stream = new StreamReader(response.GetResponseStream()))
            {
               stream.BaseStream.Read(b, 0, b.Length);
            }
            response.Close();

            using (StreamWriter stream= new StreamWriter(FileTitle))
            {
                for (int i = 0; i < b.Length; i++)
                {
                    stream.BaseStream.WriteByte(b[i]);
                }
            }
Пытаюсь скачать файл типа 7z (если это имеет значение)
Размер файла полностью совпадает с оригиналом скаченным за так.
Но файл открыть не могу, пишет архив поврежден.

В чем косяк ?
L6go1as вне форума Ответить с цитированием
Старый 01.10.2014, 12:36   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Код:
string FileTitle = response.ResponseUri.Segments[response.ResponseUri.Segments.Length - 1];
                FileTitle = FileTitle.Replace("%20", " ");

                byte[] b = new byte[(int)response.ContentLength];

                using (BinaryReader stream = new BinaryReader(response.GetResponseStream()))
                {
                    b= stream.ReadBytes(b.Length);
                }
                response.Close();

                using (StreamWriter stream = new StreamWriter(FileTitle))
                {
                    stream.Write(b);
                }
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.

Последний раз редактировалось WorldMaster; 01.10.2014 в 12:40.
WorldMaster вне форума Ответить с цитированием
Старый 01.10.2014, 16:02   #3
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

WorldMaster, пасиб, но чет не фурычит ...

Я нашел выход конечно же, но хочу свой пример докумекать.

Вот такой вопрос, есть строка:

Код:
while ((int bytes = stream.Read(buffer, 0, buffer.Length)) != 0)
Получается что по другому никак ? Ведь stream.Read - считывает кусками, пока до 0 не дойдет, ведь так ?

Последний раз редактировалось L6go1as; 01.10.2014 в 16:45.
L6go1as вне форума Ответить с цитированием
Старый 01.10.2014, 16:45   #4
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Потомучто до таймаута не успел прочитать все 6612217 байт. Такова логика работы потоков
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 01.10.2014, 17:20   #5
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Цитата:
Сообщение от Luuzuk Посмотреть сообщение
Потомучто до таймаута не успел прочитать все 6612217 байт. Такова логика работы потоков
Насколько я понимаю, еще сам Stream.Read() работает так, что читает только те байты, которые доступны на данный момент (получается, что в любом случае меньше, чем исходный размер файла) и без цикла с ним в принципе не получится работать.
L6go1as вне форума Ответить с цитированием
Старый 01.10.2014, 18:20   #6
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Такой вид кода уместен или стоит разбить ?

Код:
using()
{
       using()
       {
            логика 
       }
}
L6go1as вне форума Ответить с цитированием
Старый 01.10.2014, 18:58   #7
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Вы фал с инета тянете?? ведь есть другие методы закачки файлов. Зачем именно этот выбран?
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 01.10.2014, 19:52   #8
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Цитата:
Сообщение от WorldMaster Посмотреть сообщение
Вы фал с инета тянете?? ведь есть другие методы закачки файлов. Зачем именно этот выбран?
С него родимого.

У меня вся логика построена на webrequest. Поэтому через него и файл тяну. Да и уж начал изучать, нужно добивать.

Можно сделать через webclient в одну строку, но мы же не ищем легкие пути

Вот скажем тяну я файл - нужно зарезервировать место на диске, пойдет ли создание точной копии файлов с схожим размером с дальнейшим переписанием файла ?
L6go1as вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка файла -Jack- Работа с сетью в Delphi 1 02.01.2014 17:09
Загрузка файла Миша! Общие вопросы по Java, Java SE, Kotlin 0 08.12.2012 22:48
Проблема такова: язык:Delphi7; сохранения файла; загрузка файла в String Grid lightdevil Общие вопросы Delphi 3 06.03.2009 23:10
загрузка из файла RAVAL)) Общие вопросы Delphi 2 04.03.2009 12:48
Загрузка файла AVer Работа с сетью в Delphi 0 11.02.2007 17:22