The base stream is not writable (GZipStream) - C#
Формулировка задачи:
Привет всем. Мне нужно через некоторый период времени добавлять в архив файлы. Делаю это так:
После первого прохода таймера файл архивируется, но на второй такт таймера - ошибка : The base stream is not writable на Как решить проблему?
compStream = new GZipStream(destFile, CompressionMode.Compress);
sourceFile = File.OpenRead(@"C:\Temp\filename);
try
{
int value = sourceFile.ReadByte();
while (value != -1)
{
compStream.WriteByte((byte)value);
value = sourceFile.ReadByte();
}
sourceFile.Dispose();
compStream.Dispose();
compStream.Close();
File.Delete(@"C:\Temp\filename);
}
catch { }compStream = new GZipStream(destFile, CompressionMode.Compress);
Решение задачи: «The base stream is not writable (GZipStream)»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Screener
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public Image ScrImage;
public string filename = SystemInformation.UserName.ToString() + "_" + Environment.MachineName.ToString();
FileStream destFile;
FileStream sourceFile;
GZipStream compStream ;
private void Form1_Load(object sender, EventArgs e)
{
if (File.Exists(@"C:\Temp\Screener\zip.zip"))
{
DirectoryInfo dirInfo = new DirectoryInfo(@"C:\Temp\Screener\");
foreach (FileInfo file in dirInfo.GetFiles())
{
file.Delete();
}
destFile = File.Create(@"C:\Temp\Screener\zip.zip");
}
else
{
Directory.CreateDirectory(@"C:\Temp\Screener");
destFile = File.Create(@"C:\Temp\Screener\zip.zip");
}
}
public Bitmap ImageFromScreen()
{
Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
using (var gr = Graphics.FromImage(bmp))
{
gr.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y,
0, 0, Screen.PrimaryScreen.Bounds.Size);
}
return bmp;
}
private void timer1_Tick(object sender, EventArgs e)
{
compStream = new GZipStream(destFile, CompressionMode.Compress);
string datescr = System.DateTime.Now.ToString().Replace(":", ".");
ScrImage = ImageFromScreen();
ScrImage.Save(@"C:\Temp\Screener\" + datescr + filename, System.Drawing.Imaging.ImageFormat.Jpeg);
ScrImage.Dispose();
sourceFile = File.OpenRead(@"C:\Temp\Screener\" + datescr + filename);
try
{
int value = sourceFile.ReadByte();
while (value != -1)
{
compStream.WriteByte((byte)value);
value = sourceFile.ReadByte();
}
sourceFile.Dispose();
compStream.Dispose();
compStream.Close();
File.Delete(@"C:\Temp\Screener\" + datescr + filename);
}
catch(Exception ex) {MessageBox.Show(ex.ToString()); }
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
}
}
}