[PR #1050] [CLOSED] Add ACE archive support (read-only, stored entries) #1471

Open
opened 2026-01-29 22:20:44 +00:00 by claunia · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/adamhathcock/sharpcompress/pull/1050
Author: @Copilot
Created: 11/29/2025
Status: Closed

Base: masterHead: copilot/add-ace-archive-support


📝 Commits (4)

  • 7149781 Initial plan
  • 6ae63f6 Add ACE archive support with reader implementation
  • c783a83 Address code review feedback for ACE archive support
  • f796aa1 Add ACE 2.0 format reading support

📊 Changes

13 files changed (+700 additions, -2 deletions)

View changed files

📝 FORMATS.md (+3 -1)
src/SharpCompress/Common/Ace/AceEntry.cs (+58 -0)
src/SharpCompress/Common/Ace/AceEntryHeader.cs (+339 -0)
src/SharpCompress/Common/Ace/AceFilePart.cs (+59 -0)
src/SharpCompress/Common/Ace/AceVolume.cs (+13 -0)
📝 src/SharpCompress/Common/ArchiveType.cs (+1 -0)
📝 src/SharpCompress/Common/CompressionType.cs (+2 -0)
src/SharpCompress/Factories/AceFactory.cs (+64 -0)
📝 src/SharpCompress/Factories/Factory.cs (+1 -0)
src/SharpCompress/Readers/Ace/AceReader.cs (+67 -0)
📝 src/SharpCompress/Readers/ReaderFactory.cs (+1 -1)
tests/SharpCompress.Test/Ace/AceReaderTests.cs (+92 -0)
tests/TestArchives/Archives/Ace.stored.ace (+0 -0)

📄 Description

Adds support for reading ACE archives (version 1.0 and 2.0 formats) as requested in #875. Due to the proprietary nature of ACE compression algorithms, only stored (uncompressed) entries can be extracted.

Changes

  • New types: AceReader, AceEntry, AceEntryHeader, AceFilePart, AceVolume, AceFactory
  • ArchiveType enum: Added Ace value
  • CompressionType enum: Added Ace and Ace2 values for ACE 1.0 and 2.0 compression
  • Factory registration: AceFactory registered for automatic format detection via **ACE** signature at offset 7
  • ACE 2.0 support: Main header parsing for version detection, host OS, solid/multi-volume flags, and recovery record header handling

Usage

using var stream = File.OpenRead("archive.ace");
using var reader = AceReader.Open(stream);

while (reader.MoveToNextEntry())
{
    if (!reader.Entry.IsDirectory)
    {
        reader.WriteEntryToDirectory("output/", new ExtractionOptions { ExtractFullPath = true });
    }
}

Limitations

  • Read-only (no write support)

  • Only stored/uncompressed entries extractable

  • Compressed entries (ACE LZ77 and ACE 2.0 improved LZ77) throw NotSupportedException due to proprietary algorithms

  • No Archive API (reader-only, like Arj)

  • Fixes adamhathcock/sharpcompress#875

Original prompt

This section details on the original issue you should resolve

<issue_title>[Feature Request] ACE archive support</issue_title>
<issue_description>ACE archive support would be nice, especially for version 1 archives as that seems to be better documented. The ArchiveTeam wiki has good resources for ACE archives, including a link to example files and software that is able to extract it. http://fileformats.archiveteam.org/wiki/ACE</issue_description>

Comments on the Issue (you are @copilot in this section)


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/adamhathcock/sharpcompress/pull/1050 **Author:** [@Copilot](https://github.com/apps/copilot-swe-agent) **Created:** 11/29/2025 **Status:** ❌ Closed **Base:** `master` ← **Head:** `copilot/add-ace-archive-support` --- ### 📝 Commits (4) - [`7149781`](https://github.com/adamhathcock/sharpcompress/commit/7149781b0ff599ddb593d9079a08d64faf1a08da) Initial plan - [`6ae63f6`](https://github.com/adamhathcock/sharpcompress/commit/6ae63f6a4706ed3a1961a675e43ce6d33907e8e7) Add ACE archive support with reader implementation - [`c783a83`](https://github.com/adamhathcock/sharpcompress/commit/c783a83a9c8a8c174e09faf8a220cb901b4d156f) Address code review feedback for ACE archive support - [`f796aa1`](https://github.com/adamhathcock/sharpcompress/commit/f796aa1fa1981387283d5798e454e7fa3336c854) Add ACE 2.0 format reading support ### 📊 Changes **13 files changed** (+700 additions, -2 deletions) <details> <summary>View changed files</summary> 📝 `FORMATS.md` (+3 -1) ➕ `src/SharpCompress/Common/Ace/AceEntry.cs` (+58 -0) ➕ `src/SharpCompress/Common/Ace/AceEntryHeader.cs` (+339 -0) ➕ `src/SharpCompress/Common/Ace/AceFilePart.cs` (+59 -0) ➕ `src/SharpCompress/Common/Ace/AceVolume.cs` (+13 -0) 📝 `src/SharpCompress/Common/ArchiveType.cs` (+1 -0) 📝 `src/SharpCompress/Common/CompressionType.cs` (+2 -0) ➕ `src/SharpCompress/Factories/AceFactory.cs` (+64 -0) 📝 `src/SharpCompress/Factories/Factory.cs` (+1 -0) ➕ `src/SharpCompress/Readers/Ace/AceReader.cs` (+67 -0) 📝 `src/SharpCompress/Readers/ReaderFactory.cs` (+1 -1) ➕ `tests/SharpCompress.Test/Ace/AceReaderTests.cs` (+92 -0) ➕ `tests/TestArchives/Archives/Ace.stored.ace` (+0 -0) </details> ### 📄 Description Adds support for reading ACE archives (version 1.0 and 2.0 formats) as requested in #875. Due to the proprietary nature of ACE compression algorithms, only stored (uncompressed) entries can be extracted. ### Changes - **New types**: `AceReader`, `AceEntry`, `AceEntryHeader`, `AceFilePart`, `AceVolume`, `AceFactory` - **ArchiveType enum**: Added `Ace` value - **CompressionType enum**: Added `Ace` and `Ace2` values for ACE 1.0 and 2.0 compression - **Factory registration**: `AceFactory` registered for automatic format detection via `**ACE**` signature at offset 7 - **ACE 2.0 support**: Main header parsing for version detection, host OS, solid/multi-volume flags, and recovery record header handling ### Usage ```csharp using var stream = File.OpenRead("archive.ace"); using var reader = AceReader.Open(stream); while (reader.MoveToNextEntry()) { if (!reader.Entry.IsDirectory) { reader.WriteEntryToDirectory("output/", new ExtractionOptions { ExtractFullPath = true }); } } ``` ### Limitations - Read-only (no write support) - Only stored/uncompressed entries extractable - Compressed entries (ACE LZ77 and ACE 2.0 improved LZ77) throw `NotSupportedException` due to proprietary algorithms - No Archive API (reader-only, like Arj) - Fixes adamhathcock/sharpcompress#875 <!-- START COPILOT CODING AGENT SUFFIX --> <details> <summary>Original prompt</summary> > > ---- > > *This section details on the original issue you should resolve* > > <issue_title>[Feature Request] ACE archive support</issue_title> > <issue_description>ACE archive support would be nice, especially for version 1 archives as that seems to be better documented. The ArchiveTeam wiki has good resources for ACE archives, including a link to example files and software that is able to extract it. http://fileformats.archiveteam.org/wiki/ACE</issue_description> > > ## Comments on the Issue (you are @copilot in this section) > > <comments> > </comments> > </details> - Fixes adamhathcock/sharpcompress#875 <!-- START COPILOT CODING AGENT TIPS --> --- 💬 We'd love your input! Share your thoughts on Copilot coding agent in our [2 minute survey](https://gh.io/copilot-coding-agent-survey). --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
claunia added the pull-request label 2026-01-29 22:20:44 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/sharpcompress#1471