main
wanggaofeng 1 year ago
parent 9578aa7fb8
commit 2327b62d67

@ -19,6 +19,7 @@ using SharpCompress.Archives.Rar;
using SharpCompress.Archives.GZip; using SharpCompress.Archives.GZip;
using SharpCompress.Archives.Tar; using SharpCompress.Archives.Tar;
using SharpCompress.Archives.SevenZip; using SharpCompress.Archives.SevenZip;
using SharpCompress.Readers;
namespace SharpCompressStudy.Core namespace SharpCompressStudy.Core
{ {
@ -62,17 +63,33 @@ namespace SharpCompressStudy.Core
private static void DecompressRarFile(string fileName, bool isDelete) private static void DecompressRarFile(string fileName, bool isDelete)
{ {
ArgumentNullException.ThrowIfNull(fileName);
var extName = Path.GetExtension(fileName);
var descDir = Path.Combine(Path.GetDirectoryName(fileName)!, new FileInfo(fileName).Name.Replace(extName,"") + "\\");
if (!Directory.Exists(descDir))
{
Directory.CreateDirectory(descDir);
}
try try
{ {
var extName = Path.GetExtension(fileName).Trim().ToLower(); using (Stream stream = File.OpenRead(fileName))
switch (extName)
{ {
case ".rar": var reader = ReaderFactory.Open(stream);
break; while (reader.MoveToNextEntry())
default: {
break; if (!reader.Entry.IsDirectory)
{
Console.WriteLine(reader.Entry.Key);
reader.WriteEntryToDirectory(descDir, new ExtractionOptions() { ExtractFullPath = true, Overwrite = true });
}
}
} }
if (isDelete) if (isDelete)
{ {
File.Delete(fileName); File.Delete(fileName);

@ -17,6 +17,9 @@
<None Update="Resource\学习.rar"> <None Update="Resource\学习.rar">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None> </None>
<None Update="Resource\学习2.rar">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup> </ItemGroup>
</Project> </Project>

@ -3,10 +3,17 @@ namespace SharpCompressStudy
public class CommonUtilityTest public class CommonUtilityTest
{ {
[Fact] [Fact]
public void Test1() public void Zip_Test()
{ {
var file = AppDomain.CurrentDomain.BaseDirectory + "/Resource/" + "利港模型AB文件.zip"; var file = AppDomain.CurrentDomain.BaseDirectory + "/Resource/" + "利港模型AB文件.zip";
CommonUtility.Decompress(file,false); CommonUtility.Decompress(file,false);
} }
[Fact]
public void Rar_Test()
{
var file = AppDomain.CurrentDomain.BaseDirectory + "/Resource/" + "ѧϰ.rar";
CommonUtility.Decompress(file, false);
}
} }
} }

@ -20,15 +20,41 @@ namespace SharpCompressStudy.Core
[Fact] [Fact]
public void ExtractFromRar_Test() public void ExtractFromRar_Test()
{ {
var rarFilePath = AppDomain.CurrentDomain.BaseDirectory + "Resource\\ѧϰ.rar";
var extractPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resource\\", Guid.NewGuid().ToString() + "\\"); var rarFilePath = AppDomain.CurrentDomain.BaseDirectory + "Resource\\学习2.rar";
if (!Directory.Exists(extractPath))
if (!File.Exists(rarFilePath))
{ {
Directory.CreateDirectory(extractPath); throw new FileNotFoundException("Rar文件不存在");
} }
//扩展名
var extName = Path.GetExtension(rarFilePath);
//文件名
var rarFileName = Path.GetFileName(rarFilePath).Replace(extName, "");
//不带扩展名的文件名
var rarFileNameWithoutExt = Path.GetFileNameWithoutExtension(rarFilePath);
//解压根目录
var extractPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resource\\models\\temp\\", Guid.NewGuid().ToString() + "\\");
using (var archive = RarArchive.Open(rarFilePath)) using (var archive = RarArchive.Open(rarFilePath))
{ {
//压缩文件是否包含同名根目录(abc.rar解决后是否有一个名为abc的根目录)
if (archive.Entries.Where(f => f.IsDirectory && f.Key == rarFileNameWithoutExt).Count() != 1)
{
extractPath = Path.Combine(extractPath, rarFileNameWithoutExt);
}
//创建解压目录
if (!Directory.Exists(extractPath))
{
Directory.CreateDirectory(extractPath);
}
//解压所有文件到指定目录
foreach (var entry in archive.Entries) foreach (var entry in archive.Entries)
{ {
if (!entry.IsDirectory) if (!entry.IsDirectory)

Loading…
Cancel
Save