用C语言写一个简单的文件系统代码,具备基本的文件处理功能,包括实现文件的建立、打开、删除、关闭、复制、读、写、查询等功能
时间: 2023-10-20 07:05:19 浏览: 198
以下是一个简单的文件系统代码,具备基本的文件处理功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_FILE_NAME 100
#define MAX_FILE_SIZE 1024
typedef struct {
char name[MAX_FILE_NAME];
int size;
char *data;
} file;
file *files[MAX_FILE_SIZE];
int num_files = 0;
int find_file(char *name) {
int i;
for (i = 0; i < num_files; i++) {
if (strcmp(files[i]->name, name) == 0) {
return i;
}
}
return -1;
}
void create_file(char *name) {
if (find_file(name) != -1) {
printf("File already exists.\n");
return;
}
file *new_file = (file *) malloc(sizeof(file));
strcpy(new_file->name, name);
new_file->size = 0;
new_file->data = NULL;
files[num_files] = new_file;
num_files++;
printf("File created.\n");
}
void delete_file(char *name) {
int index = find_file(name);
if (index == -1) {
printf("File not found.\n");
return;
}
free(files[index]->data);
free(files[index]);
int i;
for (i = index; i < num_files - 1; i++) {
files[i] = files[i + 1];
}
num_files--;
printf("File deleted.\n");
}
void open_file(char *name) {
int index = find_file(name);
if (index == -1) {
printf("File not found.\n");
return;
}
printf("File opened.\n");
}
void close_file(char *name) {
int index = find_file(name);
if (index == -1) {
printf("File not found.\n");
return;
}
printf("File closed.\n");
}
void copy_file(char *name1, char *name2) {
int index1 = find_file(name1);
if (index1 == -1) {
printf("File not found.\n");
return;
}
int index2 = find_file(name2);
if (index2 != -1) {
printf("Destination file already exists.\n");
return;
}
file *new_file = (file *) malloc(sizeof(file));
strcpy(new_file->name, name2);
new_file->size = files[index1]->size;
new_file->data = (char *) malloc(sizeof(char) * new_file->size);
memcpy(new_file->data, files[index1]->data, new_file->size);
files[num_files] = new_file;
num_files++;
printf("File copied.\n");
}
void read_file(char *name) {
int index = find_file(name);
if (index == -1) {
printf("File not found.\n");
return;
}
printf("File contents: %s\n", files[index]->data);
}
void write_file(char *name, char *data) {
int index = find_file(name);
if (index == -1) {
printf("File not found.\n");
return;
}
files[index]->size = strlen(data);
files[index]->data = (char *) realloc(files[index]->data, sizeof(char) * files[index]->size);
memcpy(files[index]->data, data, files[index]->size);
printf("File written.\n");
}
void query_files() {
printf("Number of files: %d\n", num_files);
int i;
for (i = 0; i < num_files; i++) {
printf("File name: %s\n", files[i]->name);
printf("File size: %d\n", files[i]->size);
}
}
int main() {
char command[10];
char name1[MAX_FILE_NAME];
char name2[MAX_FILE_NAME];
char data[MAX_FILE_SIZE];
while (1) {
printf("Enter command: ");
scanf("%s", command);
if (strcmp(command, "create") == 0) {
scanf("%s", name1);
create_file(name1);
} else if (strcmp(command, "delete") == 0) {
scanf("%s", name1);
delete_file(name1);
} else if (strcmp(command, "open") == 0) {
scanf("%s", name1);
open_file(name1);
} else if (strcmp(command, "close") == 0) {
scanf("%s", name1);
close_file(name1);
} else if (strcmp(command, "copy") == 0) {
scanf("%s", name1);
scanf("%s", name2);
copy_file(name1, name2);
} else if (strcmp(command, "read") == 0) {
scanf("%s", name1);
read_file(name1);
} else if (strcmp(command, "write") == 0) {
scanf("%s", name1);
scanf("%s", data);
write_file(name1, data);
} else if (strcmp(command, "query") == 0) {
query_files();
} else if (strcmp(command, "exit") == 0) {
break;
} else {
printf("Invalid command.\n");
}
}
return 0;
}
```
该文件系统使用了一个 `file` 结构体来表示一个文件,其中包含文件名、文件大小和文件数据。文件数据是一个字符数组,其大小为文件大小。
该文件系统使用一个 `files` 数组来存储所有文件的指针。每当创建一个新文件时,该文件的指针被添加到 `files` 数组中。当删除一个文件时,该文件的指针从 `files` 数组中移除。
该文件系统包含以下功能:
- `create_file(char *name)`:创建一个新文件,并将其指针添加到 `files` 数组中。
- `delete_file(char *name)`:删除一个文件,并从 `files` 数组中移除该文件的指针。
- `open_file(char *name)`:打开一个文件。
- `close_file(char *name)`:关闭一个文件。
- `copy_file(char *name1, char *name2)`:复制一个文件。
- `read_file(char *name)`:读取一个文件的数据并打印出来。
- `write_file(char *name, char *data)`:将一个字符串写入一个文件。
- `query_files()`:查询文件系统中的所有文件。
该文件系统使用一个无限循环来等待用户输入命令。用户可以输入以下命令:
- `create <file_name>`:创建一个新文件。
- `delete <file_name>`:删除一个文件。
- `open <file_name>`:打开一个文件。
- `close <file_name>`:关闭一个文件。
- `copy <source_file_name> <destination_file_name>`:复制一个文件。
- `read <file_name>`:读取一个文件的数据。
- `write <file_name> <data>`:将一个字符串写入一个文件。
- `query`:查询文件系统中的所有文件。
- `exit`:退出文件系统。
注意:该文件系统的实现非常简单,并且存在许多限制和不足之处。例如,该文件系统只能存储最多 `MAX_FILE_SIZE` 个文件,每个文件最大大小为 `MAX_FILE_SIZE`,并且没有实现文件权限和安全性等功能。在实际应用中,需要更加完善和安全的文件系统。
阅读全文