Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > скачать файл


Автор: Evropeec 4.3.2009, 01:22
помогите плиз,
как скачать файл с web(zip), затем разпаковать в директорию, и запустить. Дело в том, что это надо сделать под Windows Mobile. System.Net.WebClient не подходит, так как его в Mobile просто нет.

Автор: Evropeec 6.3.2009, 15:51

Со скачиванием разобрался.

http://www.gotdotnet.ru/Forums/Windows/536070.aspx

Теперь архивация:

У меня есть две процедуры, одна создаёт архив, другая распаковывает

Код


        /// <summary>
        /// To Compress A File
        /// </summary>
        /// <param name="filePath">The Complete file path to the file you want to compress</param>   
        protected void Compress(string fileSource, string fileArchiv)
        {
            FileStream sourceFile = File.OpenRead(fileSource);
            FileStream destinationFile = File.Create(fileArchiv);
            byte[] buffer = new byte[sourceFile.Length];
            GZipStream zip = null;
            try
            {
                sourceFile.Read(buffer, 0, buffer.Length);
                zip = new GZipStream(destinationFile, CompressionMode.Compress);
                zip.Write(buffer, 0, buffer.Length);
            }
            catch (Exception ex)
            {
                Console.Write(ex.Message);
            }
            finally
            {
                zip.Close();
                sourceFile.Close();
                destinationFile.Close();
            }
        }

        /// <summary>
        /// To Decompress an already compressed file
        /// </summary>
        /// <param name="filePath">The complete file path of the already compressed file</param>
        protected void Decompress(string fileArchiv, string fileSource)
        {
            FileStream sourceFile = File.OpenRead(fileArchiv);
            FileStream destinationFile = File.Create(fileSource);
            GZipStream unzip = null;

            byte[] bufferWrite = new byte[4];
            FileStream fsSource = new FileStream(fileArchiv, FileMode.Open, FileAccess.Read, FileShare.Read);
            fsSource.Position = (int)fsSource.Length - 4;
            fsSource.Read(bufferWrite, 0, 4);
            fsSource.Position = 0;

            byte[] buffer = new byte[BitConverter.ToInt32(bufferWrite, 0) + 100];
            //byte[] buffer = new byte[sourceFile.Length];
            try
            {
                unzip = new GZipStream(sourceFile, CompressionMode.Decompress, false);
                int numberOfBytes = unzip.Read(buffer, 0, buffer.Length);

                destinationFile.Write(buffer, 0, numberOfBytes);
            }
            catch (Exception ex)
            {
                Console.Write(ex.Message);
            }
            finally
            {
                sourceFile.Close();
                destinationFile.Close();
                unzip.Close();
            }
        }



но архивируют и распаковывают они по одному файлу, а мне необходимо по нескольку. 

КАК сделать?

Автор: APXEOLOG 10.3.2009, 20:13
Я бы разархивировал через рар. Поискал бы в реестре ключик с адресом рара, скопировал бы rar.exe в папку с файлом, разархивировал, затем удалил бы rar.exe.

Автор: mihryak 10.3.2009, 20:30
Цитата(APXEOLOG @  10.3.2009,  21:13 Найти цитируемый пост)
Я бы разархивировал через рар. Поискал бы в реестре ключик с адресом рара, скопировал бы rar.exe в папку с файлом, разархивировал, затем удалил бы rar.exe. 

угу
и в пользовательское соглашенеи прописать обязательство клиента купить и установить WinRar
очень плохой совет

Evropeec, GZipStream не умеет работать с множественными файлами, только с потоками, точнее с одним потоком
у тебя три варианта
- заливать в зипстрим файл за файлом, придумав свой служебный заголовок, по которому можно будет правильно восстановить длины и имена файлов
- поискать что-нибудь уже написанное, например, http://www.icsharpcode.net/OpenSource/SharpZipLib/ (если не смущает GPL-лицензия)
- написать самому

Автор: jonie 10.3.2009, 22:18
APXEOLOG вам не стоит быть хирургом... этак вы будете искать печень путем поиска сначала сердца (с выкручиванием его ессно), потом дойдете до желудка...

в общем проведенное расследование показало что нормальным образом это нереализуемо ибо M$ не предусмотрела реализацию метаинформации в архиве (этого стандарт gzip не требует).

в .net 3+ есть класс ZipPackage
про него прочитать тут: http://weblogs.asp.net/jgalloway/archive/2007/10/25/creating-zip-archives-in-net-without-an-external-library-like-sharpziplib.aspx

Автор: Evropeec 12.3.2009, 00:04
Всем гигантское спасибо за помощь,

сделал через ICSharpCode.SharpZipLib

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)