The base stream is not writable (GZipStream) - C#

Узнай цену своей работы

Формулировка задачи:

Привет всем. Мне нужно через некоторый период времени добавлять в архив файлы. Делаю это так:
            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 { }
После первого прохода таймера файл архивируется, но на второй такт таймера - ошибка : The base stream is not writable на
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)
        {
            
        }
 
       
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы