昨天看到有个GZipStream类,想试试压缩功能。也看到帮助实例里面这样写://我复制部分代码,假如文件路径是这样的:D:\test.txt
FileInfo fi//打开文件
using (FileStream inFile = fi.OpenRead())
{
//创建一个新文件,在原基础上添加后缀.gz,即D:\test.txt.gz
    using (FileStream outFile = File.Create(fi.FullName + ".gz"))
    {
        using (GZipStream Compress = new GZipStream(outFile,CompressionMode.Compress))
        {
            //开始压缩了
            inFile.CopyTo(Compress);
        }后来我觉得压缩后的文件名是:test.txt.gz不爽,想改名字为test.gz,结果就连压缩文件里面的名字也改了,成了test(没有后缀名),请问该怎么解决?我尝试了 Move、Path.ChangeExtension各种方法,都是这样的

解决方案 »

  1.   

    File.Create(fi.FullName + ".gz")) 
    你这里是创建,所以他里面当然也是改了。
      

  2.   


    那你说怎么创建?我试过用  "D:\test"+".gz"  创建,可压缩后的文件还是test(没有后缀名的),真的心找不到办法。
      

  3.   

    建议你将旧文件内容读出来 然后创建新文件 再将旧文件内容写进去  最后压缩            string fileName1 = @"D:\text.Txt";
                byte[] bT = File.ReadAllBytes(fileNameO=1);//将源文件内容读到bT中,            string fileName2 = @"D:\text.gz"; //定义新文件名称            FileStream fs = File.Create(fileName2);
                fs.Write(bT, 0, bT.Length);//写入新文件,即可完成改后缀。
                fs.Close();
      

  4.   

    文件名不用改//用正则替换也可以
    var zipFileName = Path.Combine(Path.GetDirectoryName(fi.FullName), Path.GetFileNameWithoutExtension(fi.Name)) + ".gz";
    using (FileStream outFile = File.Create(zipFileName))
      

  5.   


    不行呀,这样创建的还是 test.gz 的文件,压缩后压缩里面的文件是 test(没有后缀)。我觉的这不单单是文件名的问题啊。我用 Move 都不行的,Move后,里面的文件名也改了,这
      

  6.   


    sorry,嵌套了三个对象,看错了,应该是FileInfo fi 
    //打开文件
    using (FileStream inFile = fi.OpenRead())
    {     
         using (FileStream outFile = File.Create(fi.FullName))  //这里使用原始文件名输出
         {
               //用正则替换也可以
               var zipFileName = Path.Combine(Path.GetDirectoryName(fi.FullName), Path.GetFileNameWithoutExtension(fi.Name)) + ".gz";  //这里加gz后缀作为压缩文件名
               using (GZipStream Compress = new GZipStream(zipFileName,CompressionMode.Compress))
               {
      

  7.   


    你觉得行么?zipFileName是string类型的,而new GzipStream(参数1, 参数2)中的参数1是Stream类型的。。
      

  8.   

    无论是程序改还是压缩后再手动把“test.txt.gz”改成test.gz,压缩里面的文件都没后缀了。。你说蛋疼不?
      

  9.   

    实在不行就把扩展名写入压缩流的“头”,并其长度写入首字节,形如:
    压缩时:(首字节)扩展名所占字节数 + 扩展名(读取首字节指定的字节数) + 文件的FileStream
    再按此解压
      

  10.   

    压缩时:扩展名所占字节数写入首字节 + Encoding.UTF8.GetBytes(扩展名) + 文件的FileStream
    解压时:byte extBytes = gzipStream.ReadByte();
    var ext = Encoding.UTF8.GetString(后续的extBytes)
    剩下的是真实的文件