C 语言实现二级目录结构文件管理模拟系统
#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;
原文地址: https://www.cveoy.top/t/topic/f1v6 著作权归作者所有。请勿转载和采集!