Задача такая — я получаю набор байтов, зипую их, и сохраняю в Base64 string — отправляю на другую машину — там из строки получается массив байтов (все еще зипованых) и сохраняется как zip архив, но при открытии такого архива вылетает предупреждение — "неизвестный метод, нет файлов для извлечения".
Вот тестовый код написал:
FileStream file = new FileStream("test.doc", FileMode.Open);
byte[] bytes = new byte[file.Length];
int numBytesToRead = (int)file.Length;
int numBytesRead = 0;
while (numBytesToRead > 0)
{
// Read may return anything from 0 to numBytesToRead.int n = file.Read(bytes, numBytesRead, numBytesToRead);
// Break when the end of the file is reached.if (n == 0)
break;
numBytesRead += n;
numBytesToRead -= n;
}
file.Close();
string str = "";
using (MemoryStream ms = new MemoryStream())
{
using (ZipOutputStream gzs = new ZipOutputStream(ms))
{
//gzs.UseZip64 = UseZip64.Off;
ZipEntry entry = new ZipEntry(Path.GetFileName(file.Name));
gzs.PutNextEntry(entry);
//using (StreamWriter sw = new StreamWriter(gzs))
//{
// sw.Write(Encoding.UTF8.GetString(bytes));
//}
gzs.Write(bytes, 0, bytes.Length);
}
str = Convert.ToBase64String(ms.ToArray());
}
FileStream zipfile = new FileStream("test.zip", FileMode.Create);
byte[] zipbytes = Convert.FromBase64String(str);
zipfile.Write(zipbytes, 0, zipbytes.Length);
zipfile.Close();
Для того что бы в архиве оставалось имя файла использую SharpZipLib библиотеку. что инетересно с простым текстовым файлом — все работает.
Подскажите ошибку.
Спасибо.
Здравствуйте, Alex Dav, Вы писали:
AD>Задача такая — я получаю набор байтов, зипую их, и сохраняю в Base64 string — отправляю на другую машину — там из строки получается массив байтов (все еще зипованых) и сохраняется как zip архив, но при открытии такого архива вылетает предупреждение — "неизвестный метод, нет файлов для извлечения". AD>Вот тестовый код написал:
AD>
AD>FileStream file = new FileStream("test.doc", FileMode.Open);
AD>byte[] bytes = new byte[file.Length];
AD>int numBytesToRead = (int)file.Length;
AD>int numBytesRead = 0;
AD>while (numBytesToRead > 0)
AD>{
AD> // Read may return anything from 0 to numBytesToRead.
AD> int n = file.Read(bytes, numBytesRead, numBytesToRead);
AD> // Break when the end of the file is reached.
AD> if (n == 0)
AD> break;
AD> numBytesRead += n;
AD> numBytesToRead -= n;
AD>}
AD>file.Close();
AD>string str = "";
AD>using (MemoryStream ms = new MemoryStream())
AD>{
AD> using (ZipOutputStream gzs = new ZipOutputStream(ms))
AD> {
AD> //gzs.UseZip64 = UseZip64.Off;
AD> ZipEntry entry = new ZipEntry(Path.GetFileName(file.Name));
AD> gzs.PutNextEntry(entry);
AD> //using (StreamWriter sw = new StreamWriter(gzs))
AD> //{
AD> // sw.Write(Encoding.UTF8.GetString(bytes));
AD> //}
AD> gzs.Write(bytes, 0, bytes.Length);
AD> }
AD> str = Convert.ToBase64String(ms.ToArray());
AD>}
AD>FileStream zipfile = new FileStream("test.zip", FileMode.Create);
AD>byte[] zipbytes = Convert.FromBase64String(str);
AD>zipfile.Write(zipbytes, 0, zipbytes.Length);
AD>zipfile.Close();
AD>
AD>Для того что бы в архиве оставалось имя файла использую SharpZipLib библиотеку. что инетересно с простым текстовым файлом — все работает. AD>Подскажите ошибку. AD>Спасибо.
Здравствуйте, gagabu, Вы писали:
G>Ваш тестовый пример у меня отлично работает — на выходе получаю архив с моим файлом. Возможно, вы что-то теряете, когда передаете по сети?
А вы попробуйте открыть его
Здравствуйте, Alex Dav, Вы писали:
AD>Здравствуйте, gagabu, Вы писали:
G>>Ваш тестовый пример у меня отлично работает — на выходе получаю архив с моим файлом. Возможно, вы что-то теряете, когда передаете по сети? AD>А вы попробуйте открыть его
Хотя, да — смотря чем открывать — 7zip без проблем — WinRar дает ошибку указанные