Skip to content

gvnlnz/file-compressor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

File Compressor — RLE

Strumento in C per la compressione e decompressione di file tramite algoritmo Run-Length Encoding (RLE).

Il programma principale scansiona ricorsivamente una directory e comprime tutti i file la cui dimensione supera una soglia specificata, producendo file con estensione .gz.

Come funziona RLE

Run-Length Encoding sostituisce sequenze di byte ripetuti consecutivi con una coppia (byte, conteggio).

Esempio:

Input:  AAABBBBBCC
Output: A3B5C2

Quando RLE è utile

RLE è efficace su file che contengono lunghe sequenze di byte ripetuti:

Tipo di file Motivo
File di testo con molti spazi o caratteri ripetuti Alta ridondanza
Immagini bitmap (BMP) non compresse Grandi aree di colore uniforme
File binari semplici con pattern ripetitivi Struttura regolare
File di log con molte righe simili Sequenze di caratteri uguali

Quando RLE NON è utile

RLE è controproducente (può aumentare la dimensione del file) su file già compressi o con dati eterogenei:

Tipo di file Motivo
JPEG, PNG, MP3, AAC Già compressi internamente
ZIP, tar.gz, 7z Già compressi
File cifrati Byte pseudo-casuali, nessuna ripetizione
Eseguibili (.exe, ELF) Dati misti, poca ridondanza
PDF Contiene stream già compressi

Struttura del progetto

file-compressor/
├── app.c           # Entry point: scansione ricorsiva di directory
├── compressor.c    # Implementazione compressione RLE
├── decompressor.c  # Implementazione decompressione RLE (con main proprio)
├── compressor.h
├── decompressor.h

Utilizzo

Clona il repository e spostatici con:

cd file-compressor

Compila il compressore (scansione directory):

gcc app.c compressor.c -o main

Il file eseguibile appena generato accetterà due parametri:
--path: il percorso da analizzare ricorsivamente in cerca dei file da comprimere.
--size: dimensione massima in byte, oltre la quale il file verrà compresso.

Per esempio:

./main ~/path-to-analyze 20000

Analizzerà la directory path-to-analyze e le sue sotto-directory. I file al suo interno che superano i 20KB verranno compressi e gli verrà aggiunta l'estensione .gz.

Compila il decompressore:

gcc decompressor.c -o decompressor

Decomprimere un file

./decompressor <file_compresso.gz> <file_output>

Esempio:

./decompressor documento.txt.gz documento.txt

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages