一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

C# 壓縮文件(System.IO.Compression)

 昵稱16404308 2014-03-21

C# 壓縮文件

System.IO.Compression 命名空間  
 注意:此命名空間在 .NET Framework 2.0 版中是新增的。 
System.IO.Compression 命名空間包含提供基本的流壓縮和解壓縮服務(wù)的類。 
(downmoon原作)
  類                               說(shuō)明 
 DeflateStream         提供用于使用 Deflate 算法壓縮和解壓縮流的方法和屬性。 
 GZipStream             提供用于壓縮和解壓縮流的方法和屬性。 
  枚舉                         說(shuō)明 
 CompressionMode 指定是否壓縮或解壓縮基礎(chǔ)流。 

下面以 GZipStream  為例說(shuō)明 


注意:此類在 .NET Framework 2.0 版中是新增的。 

提供用于壓縮和解壓縮流的方法和屬性。 
命名空間:System.IO.Compression
程序集:System(在 system.dll 中)
語(yǔ)法
Visual Basic(聲明) 
Public Class GZipStream
    Inherits Stream
 Visual Basic(用法) 
Dim instance As GZipStream
 
C# 
public class GZipStream : Stream
 
C++ 
public ref class GZipStream : public Stream
 
J# 
public class GZipStream extends Stream
 
JScript 
public class GZipStream extends Stream
 

備注
此類表示 GZip 數(shù)據(jù)格式,它使用無(wú)損壓縮和解壓縮文件的行業(yè)標(biāo)準(zhǔn)算法。這種格式包括一個(gè)檢測(cè)數(shù)據(jù)損壞的循環(huán)冗余校驗(yàn)值。GZip 數(shù)據(jù)格式使用的算法與 DeflateStream 類的算法相同,但它可以擴(kuò)展以使用其他壓縮格式。這種格式可以通過(guò)不涉及專利使用權(quán)的方式輕松實(shí)現(xiàn)。gzip 的格式可以從 RFC 1952“GZIP file format specification 4.3(GZIP 文件格式規(guī)范 4.3)GZIP file format specification 4.3(GZIP 文件格式規(guī)范 4.3)”中獲得。此類不能用于壓縮大于 4 GB 的文件。

給繼承者的說(shuō)明 當(dāng)從 GZipStream 繼承時(shí),必須重寫(xiě)下列成員:CanSeek、CanWrite 和 CanRead。 


下面提供 一個(gè)完整的壓縮與解壓類(downmoon原作 ):

 

class clsZip
    
{
        
public void CompressFile ( string sourceFile, string destinationFile )
        
{
            
// make sure the source file is there
            if ( File.Exists ( sourceFile ) == false )
                
throw new FileNotFoundException ( );

            
// Create the streams and byte arrays needed
            byte[] buffer = null;
            FileStream sourceStream 
= null;
            FileStream destinationStream 
= null;
            GZipStream compressedStream 
= null;

            
try
            
{
                
// Read the bytes from the source file into a byte array
                sourceStream = new FileStream ( sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read );

                
// Read the source stream values into the buffer
                buffer = new byte[sourceStream.Length];
                
int checkCounter = sourceStream.Read ( buffer, 0, buffer.Length );

                
if ( checkCounter != buffer.Length )
                
{
                    
throw new ApplicationException ( );
                }


                
// Open the FileStream to write to
                destinationStream = new FileStream ( destinationFile, FileMode.OpenOrCreate, FileAccess.Write );

                
// Create a compression stream pointing to the destiantion stream
                compressedStream = new GZipStream ( destinationStream, CompressionMode.Compress, true );

                
// Now write the compressed data to the destination file
                compressedStream.Write ( buffer, 0, buffer.Length );
            }

            
catch ( ApplicationException ex )
            
{
                MessageBox.Show ( ex.Message, 
"壓縮文件時(shí)發(fā)生錯(cuò)誤:", MessageBoxButtons.OK, MessageBoxIcon.Error );
            }

            
finally
            
{
                
// Make sure we allways close all streams
                if ( sourceStream != null )
                    sourceStream.Close ( );

                
if ( compressedStream != null )
                    compressedStream.Close ( );

                
if ( destinationStream != null )
                    destinationStream.Close ( );
            }

        }


        
public void DecompressFile ( string sourceFile, string destinationFile )
        
{
            
// make sure the source file is there
            if ( File.Exists ( sourceFile ) == false )
                
throw new FileNotFoundException ( );

            
// Create the streams and byte arrays needed
            FileStream sourceStream = null;
            FileStream destinationStream 
= null;
            GZipStream decompressedStream 
= null;
            
byte[] quartetBuffer = null;

            
try
            
{
                
// Read in the compressed source stream
                sourceStream = new FileStream ( sourceFile, FileMode.Open );

                
// Create a compression stream pointing to the destiantion stream
                decompressedStream = new GZipStream ( sourceStream, CompressionMode.Decompress, true );

                
// Read the footer to determine the length of the destiantion file
                quartetBuffer = new byte[4];
                
int position = (int)sourceStream.Length - 4;
                sourceStream.Position 
= position;
                sourceStream.Read ( quartetBuffer, 
04 );
                sourceStream.Position 
= 0;
                
int checkLength = BitConverter.ToInt32 ( quartetBuffer, 0 );

                
byte[] buffer = new byte[checkLength + 100];

                
int offset = 0;
                
int total = 0;

                
// Read the compressed data into the buffer
                while ( true )
                
{
                    
int bytesRead = decompressedStream.Read ( buffer, offset, 100 );

                    
if ( bytesRead == 0 )
                        
break;

                    offset 
+= bytesRead;
                    total 
+= bytesRead;
                }


                
// Now write everything to the destination file
                destinationStream = new FileStream ( destinationFile, FileMode.Create );
                destinationStream.Write ( buffer, 
0, total );

                
// and flush everyhting to clean out the buffer
                destinationStream.Flush ( );
            }

            
catch ( ApplicationException ex )
            
{
                MessageBox.Show(ex.Message, 
"解壓文件時(shí)發(fā)生錯(cuò)誤:", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            
finally
            
{
                
// Make sure we allways close all streams
                if ( sourceStream != null )
                    sourceStream.Close ( );

                
if ( decompressedStream != null )
                    decompressedStream.Close ( );

                
if ( destinationStream != null )
                    destinationStream.Close ( );
            }


        }

    }

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    欧美日本道一区二区三区| 午夜精品国产精品久久久| 青青操在线视频精品视频| 日本免费熟女一区二区三区| 美女被草的视频在线观看| 欧美精品女同一区二区| 欧美韩日在线观看一区| 欧美精品中文字幕亚洲| 亚洲黑人精品一区二区欧美| 中文字幕久热精品视频在线| 欧美人禽色视频免费看| 日韩中文字幕视频在线高清版| 亚洲中文字幕综合网在线| 欧美成人一区二区三区在线| 日本高清二区视频久二区| 熟女体下毛荫荫黑森林自拍| 国产日产欧美精品视频| 国产精品亚洲一级av第二区| 麻豆精品视频一二三区| 日韩欧美第一页在线观看| 人妻少妇久久中文字幕久久| 精品国产品国语在线不卡| 亚洲中文字幕乱码亚洲| 成年人黄片大全在线观看| 国产精品午夜视频免费观看| 日韩欧美在线看一卡一卡| 亚洲成人黄色一级大片| 伊人久久五月天综合网| 91亚洲国产成人久久| 国产欧美日本在线播放| 亚洲精品偷拍一区二区三区| 欧美国产日韩在线综合| a久久天堂国产毛片精品| 日韩国产精品激情一区| 久久天堂夜夜一本婷婷| 中文字幕禁断介一区二区 | 国产又猛又大又长又粗| 日本不卡在线一区二区三区| 福利在线午夜绝顶三级| 欧美日韩国产一级91| 日韩高清一区二区三区四区 |