日期:2014-05-17  浏览次数:20909 次

遇到一个奇怪的事,谁能说说?
昨天看到有个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各种方法,都是这样的。。。
------解决方案--------------------
File.Create(fi.FullName + ".gz")) 
你这里是创建,所以他里面当然也是改了。
------解决方案--------------------
引用:
引用:File.Create(fi.FullName + ".gz")) 
你这里是创建,所以他里面当然也是改了。

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

建议你将旧文件内容读出来 然后创建新文件 再将旧文件内容写进去  最后压缩

            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();

------解决方案--------------------
你不会隐藏了系统的后缀名显示吧。
------解决方案--------------------
文件名不用改

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

------解决方案--------------------
引用:
引用:文件名不用改
C# code?123//用正则替换也可以var zipFileName = Path.Combine(Path.GetDirectoryName(fi.FullName), Path.GetFileNameWithoutExtension(fi.Name)) + ".gz";using (FileStream o……


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后缀作为压缩文件名