Это не работало на мой случай Ubuntu AMD 64 12.04 с HP четырехъядерный поршень ПК 5 ГБ. Другие проблемы существовали, и звук исчез после обновлений и другой установки программного обеспечения. Возможно, имела ошибка сценария также? Расположенные нечетные файлы и удаленный из домашней страницы. найденный, что драйвером Kubuntu для ПК с помощью ISO DVD был NVidea MCP61, использовал sudo Кв. - добираются, устанавливают Nvidea MCP61
Расположенные синаптические файлы, которые повредили и попробовали для фиксации их. ООН установила или удалила один, установил другого, обновил третий файл.
Превращенный из ПК и перезапущенный после ожидания обновлений и обновлений установки. На следующий день звуковая установка вернулась к нормальному, и Фиктивной выходной установки не стало.
В DotNetZip добавление файлов в существующий zip-архив действительно просто и надежно.
using (var zip = ZipFile.Read(nameOfExistingZip))
{
zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
zip.AddFile(additionalFileToAdd);
zip.Save();
}
Если вы хотите указать путь к каталогу для этого нового файла, используйте другую перегрузку для AddFile ().
using (var zip = ZipFile.Read(nameOfExistingZip))
{
zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
zip.AddFile(additionalFileToAdd, "directory\\For\\The\\Added\\File");
zip.Save();
}
Если вы хотите добавить набор файлов, используйте AddFiles ().
using (var zip = ZipFile.Read(nameOfExistingZip))
{
zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
zip.AddFiles(listOfFilesToAdd, "directory\\For\\The\\Added\\Files");
zip.Save();
}
Вам не нужно беспокоиться о Close (), CloseEntry (), CommitUpdate (), Finish () или любой другой чуши.
Кто-то из Codeproject использовал этот код. Единственная разница - закрыть и закончить наоборот, и часть записи:
using (ZipOutputStream s = new
ZipOutputStream(File.Create(txtSaveTo.Text + "\\" +
sZipFileName + ".zip")))
{
s.SetLevel(9); // 0-9, 9 being the highest compression
byte[] buffer = new byte[4096];
foreach (string file in filenames)
{
ZipEntry entry = new
ZipEntry(Path.GetFileName(file));
entry.DateTime = DateTime.Now;
s.PutNextEntry(entry);
using (FileStream fs = File.OpenRead(file))
{
int sourceBytes;
do
{
sourceBytes = fs.Read(buffer, 0,
buffer.Length);
s.Write(buffer, 0, sourceBytes);
} while (sourceBytes > 0);
}
}
s.Finish();
s.Close();
}
BTW:
byte[] byteBuffer = new byte[newFileStream.Length - 1];
newFileStream.Read(byteBuffer, 0, byteBuffer.Length);
Это неверно, размер - newFileStream.length, иначе чтение идет не так. У вас есть массив, и вы делаете его, например, 10-1 имеет длину 9 байт, от 0 до 8.
Но ваше чтение от 0 до 9 ...
Я думаю, ваш вызов Finish
должен быть до вашего вызова Close
.
Обновление: ] Похоже на известную ошибку . Возможно, это уже было исправлено - вам нужно проверить свою версию SharpZipLib, чтобы узнать, содержит ли она какое-либо исправление. Если нет, вы можете обойти это, скопировав все файлы в новый архив, добавив новый файл, а затем переместив новый архив под старое имя архива.