您的位置 首页 > 数码极客

【解压gz】使用CSharp 解压tar.gz压缩文件……

最近,项目收集了更多的原始遥感图像文件,由于文件大小(每个超过1GB),完全没有硬盘可以完全解压缩,项目只要使用其中的一部分,就会尝试用C#读取其中的一部分。

影像文件组织

百度了一下,以·为后缀的文件是一种压缩文件 ,在Linux和macOS下常见,Linux和macOS都可以直接解压使用这种压缩文件。在windows下的WinRAR也可以使用,相当于常见的RAR和ZIP格式。

而面对大量文件中的部分数据读取,自然想到了程序化解决。

此处用到 ICS库,首先需要添加ICS.dll的引用,本文引用的下载地址为:

程序思路主要是2步,第一步是将解压为tar格式文件,第二部再从tar文件中将指定文件导出,最后删除tar文件完成操作。

解压文件

public bool getTarGzFile(string TargetFile, string saveto, string fileformat)

{

string rootFile = " ";

string filepath = TargetFile;

//读取压缩文件(zip文件),准备解压缩

GZipInputStream gzs = new GZipInputStream()));

string tarfilename = Pa(TargetFile), Pa(TargetFile));

FileStream destFile = File.Open(tarfilename, FileMode.Create);

try

{

int buffersize = 2048;//缓冲区的尺寸,一般是2048的倍数

byte[] FileData = new byte[buffersize];//创建缓冲数据

while (buffersize > 0)//一直读取到文件末尾

{

buffersize = gzs.Read(FileData, 0, buffersize);//读取压缩文件数据

de(FileData, 0, buffersize);//写入目标文件

}

}

catch (Exception ee)

{

Con);

}

de();//关闭目标文件

gzs.Close();//关闭压缩文件

bool result = UnZip(tarfilename, saveto, fileformat);

return result;

}

从tar文件中提取指定文件

在上一步倒数第三行有一个UnZip函数就是提取指定格式文件,提取完成后删除tar文件

private bool UnZip(string fileToUnZip, string zipedFolder, string fileformat)

{

bool result = true;

FileStream fs = null;

TarEntry ent = null;

string fileName;

if (!File.Exists(fileToUnZip))

return false;

if (!Direc(zipedFolder))

Direc(zipedFolder);

try

{

TarInputStream zipStream = new TarInputStream()));

while ((ent = zi()) != null)

{

if (!))

{

fileName = Pa(zipedFolder, ent.Name);

fileName = ('/', '\\');//change by Mr.HopeGi

int index = ent.Name.LastIndexOf('/');

if (index != -1 || ("\\"))

{

string tmpDir = (index != -1 ? (0, ('\\')) : fileName) + "\\";

if (!Direc(tmpDir))

{

Direc(tmpDir);

}

if (tmpDir == fileName)

{

continue;

}

}

List<String> formatlb = (';').ToList();

for (int uu = 0; uu < ; uu++)

{

if (formatlb[uu]))

{

if (fileName))

{

//获取时间

DateTime dt = Da;

string timeNow = dt.ToString("yyyy-MM-dd_HH-mm-ss-ff");

fileName = Sy(fileName) + "\\" + System.IO.Pa(fileName) + "_" + timeNow + Sy(fileName);

}

fs = File.Create(fileName);

int size = 1024 * 1024 * 4;

byte[] data = new byte[size];

while (true)

{

size = zi(data, 0, da);

if (size > 0)

{

(data, 0, size);

}

else

{

break;

}

}

break;

}

}

}

}

zi();

}

catch

{

result = false;

}

finally

{

if (fs != null)

{

();

();

}

if (ent != null)

{

ent = null;

}

GC.Collect();

GC.Collect(1);

}

try

{

File.Delete(fileToUnZip);

}

catch (Exception ex)

{

}

return result;

}

实现效果

程序界面

最终实现压缩文件中指定文件的自动化提取...

关于作者: admin

无忧经验小编鲁达,内容侵删请Email至wohenlihai#qq.com(#改为@)

热门推荐