Untitled

 avatar
unknown
plain_text
5 months ago
2.1 kB
1
Indexable
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <dirent.h>
#include <unistd.h>

// Function to traverse the directory recursively
void traverse_directory(const char *dir_path, FILE *output_file) {
    struct dirent *entry;
    DIR *dir = opendir(dir_path);

    if (dir == NULL) {
        perror("opendir failed");
        return;
    }

    while ((entry = readdir(dir)) != NULL) {
        // Skip the "." and ".." entries
        if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {
            continue;
        }

        // Build the full path to the file or directory
        char path[1024];
        snprintf(path, sizeof(path), "%s/%s", dir_path, entry->d_name);

        struct stat statbuf;
        if (lstat(path, &statbuf) == -1) {
            perror("lstat failed");
            continue;
        }

        // Check if it's a regular file
        if (S_ISREG(statbuf.st_mode)) {
            // Write file size to the output file
            fprintf(output_file, "%s: %ld bytes\n", path, statbuf.st_size);
        }
        // If it's a directory, traverse it recursively
        else if (S_ISDIR(statbuf.st_mode)) {
            traverse_directory(path, output_file);
        }
    }

    closedir(dir);
}

int main(int argc, char *argv[]) {
    // Check for the correct number of arguments
    if (argc != 3) {
        fprintf(stderr, "Usage: %s <directory> <output_file>\n", argv[0]);
        return EXIT_FAILURE;
    }

    const char *dir_path = argv[1];
    const char *output_file_path = argv[2];

    // Open the output file
    FILE *output_file = fopen(output_file_path, "w");
    if (output_file == NULL) {
        perror("fopen failed");
        return EXIT_FAILURE;
    }

    // Start traversing the directory
    traverse_directory(dir_path, output_file);

    // Close the output file
    fclose(output_file);

    printf("File sizes written to %s\n", output_file_path);
    return EXIT_SUCCESS;
}
Editor is loading...
Leave a Comment