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)
- {
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д