昨天看到有个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各种方法,都是这样的
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各种方法,都是这样的
解决方案 »
- 反射取得对象的属性名
- 如何做到不断生成随机数,按下按钮就停止
- C# Cookies 逗号的使用问题。
- 用SQL语句 datedif 遇到的问题.请朋友们赐教f
- 关于存储过程与表的关系的疑问
- 如何用代码复制SQLServer数据库
- 关于C#连接数据库MDF文件的问题!!!!急急急!!!!!
- 怎样才能提出来实时的Text值?
- 我做了一个用listView列决系统进程的程序,为什么老是提示“进程计数器已禁用,因此无法执行请求“急急,在线等(分数不够再加)(附原吗
- 难道ajax里的updatepanel是奇葩?
- 关于C#中Socket通信中,服务端如何使用客户端和服务端建立的现有连接(也就是现有socket进行通信)
- C# 总是提醒我方法无效~跪求解决~
你这里是创建,所以他里面当然也是改了。
那你说怎么创建?我试过用 "D:\test"+".gz" 创建,可压缩后的文件还是test(没有后缀名的),真的心找不到办法。
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))
不行呀,这样创建的还是 test.gz 的文件,压缩后压缩里面的文件是 test(没有后缀)。我觉的这不单单是文件名的问题啊。我用 Move 都不行的,Move后,里面的文件名也改了,这
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))
{
你觉得行么?zipFileName是string类型的,而new GzipStream(参数1, 参数2)中的参数1是Stream类型的。。
压缩时:(首字节)扩展名所占字节数 + 扩展名(读取首字节指定的字节数) + 文件的FileStream
再按此解压
解压时:byte extBytes = gzipStream.ReadByte();
var ext = Encoding.UTF8.GetString(后续的extBytes)
剩下的是真实的文件