C语言模拟一个简单的文件系统
时间: 2023-07-04 12:19:26 浏览: 262
好的,下面是一个简单的C语言代码,实现了一个简单的文件系统。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_FILES 100 // 最大文件数量
#define MAX_NAME_LENGTH 20 // 文件名最大长度
typedef struct {
char name[MAX_NAME_LENGTH];
int size;
char *data;
} file_t;
file_t files[MAX_FILES];
int num_files = 0;
// 创建一个新文件
int create_file(char *name, int size) {
if (num_files >= MAX_FILES) {
printf("文件数量已达上限!\n");
return -1;
}
if (strlen(name) > MAX_NAME_LENGTH) {
printf("文件名过长!\n");
return -1;
}
// 查找是否已经存在同名文件
for (int i = 0; i < num_files; i++) {
if (strcmp(files[i].name, name) == 0) {
printf("文件已经存在!\n");
return -1;
}
}
file_t *file = &files[num_files];
strcpy(file->name, name);
file->size = size;
file->data = (char *)malloc(size);
num_files++;
return num_files - 1;
}
// 删除一个文件
int delete_file(char *name) {
for (int i = 0; i < num_files; i++) {
if (strcmp(files[i].name, name) == 0) {
free(files[i].data);
// 将最后一个文件移动到当前位置,覆盖要删除的文件
num_files--;
files[i] = files[num_files];
printf("文件已删除!\n");
return 0;
}
}
printf("文件不存在!\n");
return -1;
}
// 读取一个文件
int read_file(char *name, char *buffer, int size) {
for (int i = 0; i < num_files; i++) {
if (strcmp(files[i].name, name) == 0) {
if (size < files[i].size) {
printf("缓冲区太小!\n");
return -1;
}
memcpy(buffer, files[i].data, files[i].size);
printf("文件已读取!\n");
return 0;
}
}
printf("文件不存在!\n");
return -1;
}
// 写入一个文件
int write_file(char *name, char *data, int size) {
for (int i = 0; i < num_files; i++) {
if (strcmp(files[i].name, name) == 0) {
if (size > files[i].size) {
printf("文件空间不足!\n");
return -1;
}
memcpy(files[i].data, data, size);
printf("文件已写入!\n");
return 0;
}
}
printf("文件不存在!\n");
return -1;
}
int main() {
char buffer[100];
// 创建文件
int file_id = create_file("test.txt", 100);
if (file_id >= 0) {
printf("文件已创建,ID为 %d\n", file_id);
}
// 写入文件
strcpy(buffer, "Hello, world!");
if (write_file("test.txt", buffer, strlen(buffer)) == 0) {
printf("文件已写入:%s\n", buffer);
}
// 读取文件
if (read_file("test.txt", buffer, sizeof(buffer)) == 0) {
printf("文件已读取:%s\n", buffer);
}
// 删除文件
delete_file("test.txt");
return 0;
}
```
这个代码实现了以下几个功能:
- `create_file`:创建一个新文件,需要指定文件名和文件大小。
- `delete_file`:删除一个文件,需要指定文件名。
- `read_file`:读取一个文件,需要指定文件名和一个缓冲区,缓冲区需要足够大来存储文件数据。
- `write_file`:写入一个文件,需要指定文件名和要写入的数据,数据长度不能超过文件大小。
这个文件系统只是一个非常简单的模拟,实际的文件系统要复杂得多,需要考虑并发访问、磁盘分区、文件权限等问题。
阅读全文