Exemplo n.º 1
0
        public static string CompressFile(string filePath, string filename, string name)
        {
            LZW          Compresor_lzw  = new LZW();
            FileStream   fileC          = new FileStream(filePath, FileMode.OpenOrCreate);
            BinaryReader Lector         = new BinaryReader(fileC);
            int          Cant_Byte_Read = 10000;
            int          Aumentar_Max   = 1;

            byte[] Text = new byte[Cant_Byte_Read];
            Text = Lector.ReadBytes(Cant_Byte_Read);
            while (fileC.Position < fileC.Length)
            {
                byte[] Aux = Lector.ReadBytes(Cant_Byte_Read);
                Array.Resize(ref Text, Text.Length + Aux.Length);
                Aux.CopyTo(Text, Cant_Byte_Read * Aumentar_Max);
                Aumentar_Max++;
            }
            Lector.Close();
            byte[] Impresor = Compresor_lzw.Compresion(Text);
            byte[] Result   = new byte[filename.Length + 1];
            Result[0] = Convert.ToByte(filename.Length);
            for (int i = 1; i <= filename.Length; i++)
            {
                Result[i] = Convert.ToByte(Convert.ToChar(filename[i - 1]));
            }
            Array.Resize(ref Result, filename.Length + 1 + Impresor.Length);
            Impresor.CopyTo(Result, filename.Length + 1);
            string FinalFileName = Directory.GetCurrentDirectory() + "\\Compressed\\" + name + ".lzw";
            int    count         = 0;

            while (File.Exists(FinalFileName))
            {
                count++;
                FinalFileName = Directory.GetCurrentDirectory() + "\\Compressed\\" + name + count + ".lzw";
            }
            FileStream   archivo  = new FileStream(FinalFileName, FileMode.OpenOrCreate);
            BinaryWriter Escritor = new BinaryWriter(archivo);

            Escritor.Write(Result);
            Escritor.Close();
            double[] data = Compresor_lzw.Datos_Compresion();
            Compression.WriteRegistry(filename, FinalFileName, data[0], data[1], data[2]);
            File.Delete(filePath);
            return(FinalFileName);
        }