遇到一个奇怪的事,谁能说说?
昨天看到有个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"))
你这里是创建,所以他里面当然也是改了。
[解决办法]
建议你将旧文件内容读出来 然后创建新文件 再将旧文件内容写进去 最后压缩
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))
[解决办法]
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))
{
[解决办法]
压缩好,再改名不行吗?
[解决办法]
还没解决啊!!!!
[解决办法]
实在不行就把扩展名写入压缩流的“头”,并其长度写入首字节,形如:
压缩时:(首字节)扩展名所占字节数 + 扩展名(读取首字节指定的字节数) + 文件的FileStream
再按此解压