#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_FILE_NAME 100
void compressFile(const char inputFileName, const char outputFileName);
void writeCompressedData(FILE outputFile, char buffer, int count, char currentChar);
int main() {
char inputFileName[MAX_FILE_NAME];
char outputFileName[MAX_FILE_NAME];
printf("Enter the name of the file to compress: ");
scanf("%s", inputFileName);
printf("Enter the name of the compressed file: ");
scanf("%s", outputFileName);
compressFile(inputFileName, outputFileName);
printf("File compressed successfully.\n");
return 0;
}
void compressFile(const char inputFileName, const char outputFileName) {
FILE inputFile, outputFile;
inputFile = fopen(inputFileName, "r");
outputFile = fopen(outputFileName, "wb");
if (inputFile == NULL || outputFile == NULL) {
printf("Error opening files.\n");
exit(1);
}
char currentChar, nextChar;
int count = 1;
currentChar = (char)fgetc(inputFile);
while (currentChar != EOF) {
nextChar = (char)fgetc(inputFile);
if (currentChar == nextChar) {
count++;
} else {
writeCompressedData(outputFile, ¤tChar, count, currentChar);
count = 1;
}
currentChar = nextChar;
}
fclose(inputFile);
fclose(outputFile);
}
void writeCompressedData(FILE outputFile, char buffer, int count, char currentChar) {
fwrite(&count, sizeof(int), 1, outputFile);
fwrite(¤tChar, sizeof(char), 1, outputFile);
}