#include <stdio.h> #include <stdlib.h> #include <string.h>

#define MAX_FILENAME_LENGTH 50 #define MAX_DIRECTORY_LENGTH 20 #define MAX_FILES_PER_DIRECTORY 100 #define MAX_DIRECTORIES 100

typedef struct { char name[MAX_FILENAME_LENGTH]; int size; } file_t;

typedef struct { char name[MAX_DIRECTORY_LENGTH]; file_t files[MAX_FILES_PER_DIRECTORY]; int num_files; } directory_t;

directory_t directories[MAX_DIRECTORIES]; int num_directories = 0;

int create_directory(char *name) { if (num_directories >= MAX_DIRECTORIES) { printf("Error: Maximum number of directories reached. "); return -1; } for (int i = 0; i < num_directories; i++) { if (strcmp(directories[i].name, name) == 0) { printf("Error: Directory already exists. "); return -1; } } directory_t new_directory; strcpy(new_directory.name, name); new_directory.num_files = 0; directories[num_directories] = new_directory; num_directories++; printf("Directory created successfully. "); return 0; }

int create_file(char *directory_name, char *file_name, int size) { int directory_index = -1; for (int i = 0; i < num_directories; i++) { if (strcmp(directories[i].name, directory_name) == 0) { directory_index = i; break; } } if (directory_index == -1) { printf("Error: Directory not found. "); return -1; } if (directories[directory_index].num_files >= MAX_FILES_PER_DIRECTORY) { printf("Error: Maximum number of files reached for directory %s. ", directory_name); return -1; } for (int i = 0; i < directories[directory_index].num_files; i++) { if (strcmp(directories[directory_index].files[i].name, file_name) == 0) { printf("Error: File already exists in directory %s. ", directory_name); return -1; } } file_t new_file; strcpy(new_file.name, file_name); new_file.size = size; directories[directory_index].files[directories[directory_index].num_files] = new_file; directories[directory_index].num_files++; printf("File created successfully in directory %s. ", directory_name); return 0; }

void list_files(char *directory_name) { int directory_index = -1; for (int i = 0; i < num_directories; i++) { if (strcmp(directories[i].name, directory_name) == 0) { directory_index = i; break; } } if (directory_index == -1) { printf("Error: Directory not found. "); return; } printf("Files in directory %s: ", directory_name); for (int i = 0; i < directories[directory_index].num_files; i++) { printf("%s (%d bytes) ", directories[directory_index].files[i].name, directories[directory_index].files[i].size); } }

int main() { char command[100]; char directory_name[MAX_DIRECTORY_LENGTH]; char file_name[MAX_FILENAME_LENGTH]; int size;

while (1) {
    printf("Enter command (create_directory, create_file, list_files, exit):

"); fgets(command, 100, stdin); command[strlen(command) - 1] = '\0';

    if (strcmp(command, "create_directory") == 0) {
        printf("Enter directory name:

"); fgets(directory_name, MAX_DIRECTORY_LENGTH, stdin); directory_name[strlen(directory_name) - 1] = '\0'; create_directory(directory_name); } else if (strcmp(command, "create_file") == 0) { printf("Enter directory name: "); fgets(directory_name, MAX_DIRECTORY_LENGTH, stdin); directory_name[strlen(directory_name) - 1] = '\0'; printf("Enter file name: "); fgets(file_name, MAX_FILENAME_LENGTH, stdin); file_name[strlen(file_name) - 1] = '\0'; printf("Enter file size: "); scanf("%d", &size); getchar(); create_file(directory_name, file_name, size); } else if (strcmp(command, "list_files") == 0) { printf("Enter directory name: "); fgets(directory_name, MAX_DIRECTORY_LENGTH, stdin); directory_name[strlen(directory_name) - 1] = '\0'; list_files(directory_name); } else if (strcmp(command, "exit") == 0) { break; } else { printf("Error: Invalid command. "); } }

return 0;
C 语言实现二级目录结构文件管理模拟系统

原文地址: https://www.cveoy.top/t/topic/f1v6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录