You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

91 lines
3.2 KiB
C#

1 year ago
namespace SharpCompressStudy.Core
{
/// <summary>
/// <20><>Ϊ<EFBFBD><CEAA>Rarѹ<72><D1B9><EFBFBD><EFBFBD><E3B7A8>˽<EFBFBD>еģ<D0B5><C4A3><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD><EFBFBD>ġ<EFBFBD>
/// <20><><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>Rarѹ<72><D1B9><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܽ<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>Rar<61>ļ<EFBFBD><C4BC><EFBFBD>
/// <20>ܽ<EFBFBD>ѹ<EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>zip<69><70>tar<61><72>7z<37><7A>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>ļ<EFBFBD>
/// </summary>
public class WinRarFileTest:IDisposable
{
private readonly ITestOutputHelper testOutput;
public WinRarFileTest(ITestOutputHelper testOutputHelper)
{
this.testOutput = testOutputHelper;
}
/// <summary>
/// <20><>ѹRar<61>ļ<EFBFBD>
/// ע<><EFBFBD><E2A3BA><EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>Rarѹ<72><D1B9><EFBFBD>ļ<EFBFBD>
/// </summary>
[Fact]
public void ExtractFromRar_Test()
{
1 year ago
var rarFilePath = AppDomain.CurrentDomain.BaseDirectory + "Resource\\ѧϰ2.rar";
if (!File.Exists(rarFilePath))
1 year ago
{
1 year ago
throw new FileNotFoundException("Rar<61>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
1 year ago
}
1 year ago
//<2F><>չ<EFBFBD><D5B9>
var extName = Path.GetExtension(rarFilePath);
//<2F>ļ<EFBFBD><C4BC><EFBFBD>
var rarFileName = Path.GetFileName(rarFilePath).Replace(extName, "");
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
var rarFileNameWithoutExt = Path.GetFileNameWithoutExtension(rarFilePath);
//<2F><>ѹ<EFBFBD><D1B9>Ŀ¼
var extractPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resource\\models\\temp\\", Guid.NewGuid().ToString() + "\\");
1 year ago
using (var archive = RarArchive.Open(rarFilePath))
{
1 year ago
//ѹ<><D1B9><EFBFBD>ļ<EFBFBD><C4BC>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>Ŀ¼(abc.rar<61><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ϊabc<62>ĸ<EFBFBD>Ŀ¼)
if (archive.Entries.Where(f => f.IsDirectory && f.Key == rarFileNameWithoutExt).Count() != 1)
{
extractPath = Path.Combine(extractPath, rarFileNameWithoutExt);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹĿ¼
if (!Directory.Exists(extractPath))
{
Directory.CreateDirectory(extractPath);
}
//<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ָ<EFBFBD><D6B8>Ŀ¼
1 year ago
foreach (var entry in archive.Entries)
{
if (!entry.IsDirectory)
{
entry.WriteToDirectory(extractPath, new ExtractionOptions { ExtractFullPath = true, Overwrite = true });
}
}
}
testOutput.WriteLine($"<22>ļ<EFBFBD><C4BC><EFBFBD>ѹ<EFBFBD><D1B9>Ŀ¼<C4BF><C2BC>{extractPath}");
}
[Fact]
public void CompressToZip_Test()
{
string filesPath = AppDomain.CurrentDomain.BaseDirectory + "Resource\\ѧϰ";
var extractPathFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resource\\", Guid.NewGuid().ToString() + "\\");
var extractPathFile = Path.Combine(extractPathFolder, "ѧϰ.zip");
if (!Directory.Exists(extractPathFolder))
{
Directory.CreateDirectory(extractPathFolder);
}
using var zip = File.OpenWrite(extractPathFile);
using var zipWriter = WriterFactory.Open(zip, ArchiveType.Zip, CompressionType.Deflate);
zipWriter.WriteAll(filesPath, "*", SearchOption.AllDirectories);
}
public void Dispose()
{
GC.SuppressFinalize(this);
}
}
}