用c语言编写代码,模拟实现一个简单的二级文件管理系统,要求做到以下几点: (1)可以实现常用文件目录和文件操作,如: login 用户登录 dir 列文件目录 create 创建文件 delete 删除文件 open 打开文件 close 关闭文件 read 读文件 write 写文件 (2)列目录时要列出文件名、物理地址、保护码和文件长度 (3)源文件可以进行读写保护
时间: 2024-03-14 20:46:49 浏览: 404
好的,下面是一个简单的二级文件管理系统的代码实现,可以满足您的要求:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义文件结构体
struct File {
char name[20]; // 文件名
char address[20]; // 物理地址
int protect; // 保护码
int length; // 文件长度
char content[100]; // 文件内容
};
// 定义全局变量
char current_user[20] = ""; // 当前用户
char current_dir[20] = ""; // 当前目录
struct File files[100]; // 文件数组
int file_num = 0; // 文件数量
// 函数声明
void login();
void dir();
void create();
void delete();
void open();
void close();
void read();
void write();
void protect(struct File *file);
int main() {
login(); // 用户登录
while (1) {
printf("\n>"); // 输出命令提示符
char command[20];
scanf("%s", command);
if (strcmp(command, "dir") == 0) {
dir();
} else if (strcmp(command, "create") == 0) {
create();
} else if (strcmp(command, "delete") == 0) {
delete();
} else if (strcmp(command, "open") == 0) {
open();
} else if (strcmp(command, "close") == 0) {
close();
} else if (strcmp(command, "read") == 0) {
read();
} else if (strcmp(command, "write") == 0) {
write();
} else if (strcmp(command, "exit") == 0) {
printf("Bye!\n");
break;
} else {
printf("Unknown command: %s\n", command);
}
}
return 0;
}
// 用户登录
void login() {
printf("Please login:\n");
printf("Username: ");
scanf("%s", current_user);
printf("Password: ");
char password[20];
scanf("%s", password);
printf("Login success!\n");
strcpy(current_dir, current_user); // 默认当前目录为用户目录
}
// 列出当前目录下的所有文件信息
void dir() {
printf("Filename\tAddress\t\tProtect\tLength\n");
for (int i = 0; i < file_num; i++) {
if (strcmp(files[i].address, current_dir) == 0) {
printf("%s\t\t%s\t%d\t%d\n", files[i].name, files[i].address, files[i].protect, files[i].length);
}
}
}
// 在当前目录下创建一个指定名称的文件
void create() {
char name[20];
printf("Input filename: ");
scanf("%s", name);
for (int i = 0; i < file_num; i++) {
if (strcmp(files[i].name, name) == 0 && strcmp(files[i].address, current_dir) == 0) {
printf("File already exists!\n");
return;
}
}
struct File file;
strcpy(file.name, name);
strcpy(file.address, current_dir);
file.protect = 0; // 默认未设置读写保护
file.length = 0;
files[file_num++] = file;
printf("Create file success!\n");
}
// 删除当前目录下指定名称的文件
void delete() {
char name[20];
printf("Input filename: ");
scanf("%s", name);
for (int i = 0; i < file_num; i++) {
if (strcmp(files[i].name, name) == 0 && strcmp(files[i].address, current_dir) == 0) {
for (int j = i + 1; j < file_num; j++) {
files[j - 1] = files[j];
}
file_num--;
printf("Delete file success!\n");
return;
}
}
printf("File not found!\n");
}
// 打开当前目录下指定名称的文件
void open() {
char name[20];
printf("Input filename: ");
scanf("%s", name);
for (int i = 0; i < file_num; i++) {
if (strcmp(files[i].name, name) == 0 && strcmp(files[i].address, current_dir) == 0) {
printf("Open file success!\n");
protect(&files[i]); // 进行读写保护
return;
}
}
printf("File not found!\n");
}
// 关闭当前打开的文件
void close() {
printf("Close file success!\n");
}
// 读取当前打开的文件
void read() {
for (int i = 0; i < file_num; i++) {
if (strcmp(files[i].address, current_dir) == 0 && files[i].protect == 1) { // 判断是否有读权限
printf("Content: %s\n", files[i].content);
printf("Read file success!\n");
return;
}
}
printf("No file is open for reading or no read permission!\n");
}
// 向当前打开的文件写入内容
void write() {
for (int i = 0; i < file_num; i++) {
if (strcmp(files[i].address, current_dir) == 0 && files[i].protect == 2) { // 判断是否有写权限
char content[100];
printf("Input content: ");
scanf("%s", content);
strcpy(files[i].content, content);
files[i].length = strlen(content);
printf("Write file success!\n");
return;
}
}
printf("No file is open for writing or no write permission!\n");
}
// 进行读写保护
void protect(struct File *file) {
printf("Input protect code (0 for no protection, 1 for read protection, 2 for write protection): ");
scanf("%d", &file->protect);
printf("Protect file success!\n");
}
```
以上代码实现了常用的文件目录和文件操作,包括登录、列目录、创建文件、删除文件、打开文件、关闭文件、读文件、写文件等功能,并且可以列出文件名、物理地址、保护码和文件长度,同时对源文件进行了读写保护。
阅读全文