【要求】
为Linux系统设计一个简单的文件系统。要求做到以下几点:
(1)可以实现下列几条命令 ;
dir 列文件目录
create 创建文件
delete 删除文件
read 读文件
write 写文件
(2)列目录时要列出文件名、存取权限(八进制)、文件长度、时间(三种);
(3)源文件可以进行读写保护。
【代码实现】
----> 头文件
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <string.h>
#include <dirent.h>
#include <time.h>
----->// 定义文件信息结构体
struct FileInfo {
char name[256]; // 文件名
int permission; // 存取权限
int length; // 文件长度
time_t createTime; // 创建时间
time_t modifyTime; // 修改时间
};
---->// 列出文件目录
// 列出文件目录
void dir() {
cout << "文件目录:" << endl;
// 遍历当前目录下的所有文件
DIR* dir; // 目录指针
struct dirent* ent; // 目录项结构体
if ((dir = opendir(".")) != NULL) { // 打开当前目录
while ((ent = readdir(dir)) != NULL) { // 读取目录中的每一项
struct stat st;
stat(ent->d_name, &st); // 获取文件信息
cout << "文件名:" << ent->d_name << endl;
cout << "存取权限:" << oct << (st.st_mode & 0777) << endl;
cout << "文件长度:" << st.st_size << " 字节" << endl;
cout << "创建时间:" << ctime(&st.st_ctime);
cout << "修改时间:" << ctime(&st.st_mtime);
cout << "-------------------" << endl;
}
closedir(dir); // 关闭目录
} else {
cerr << "无法打开当前目录!" << endl;
}
}
---->// 创建文件
void create(const char* filename) {
mode_t mode = S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH; //指定权限为644
FILE* file = fopen(filename, "w");
if (file != NULL) {
printf("成功创建文件:%s\n", filename);
fclose(file);
// 设置文件权限
chmod(filename, mode);
printf("已将文件%s设置为指定权限\n", filename);
} else {
perror("创建文件失败!");
}
}
---->// 写入文件内容
void write(const string& filename) {
ofstream file(filename.c_str(), ios::app); // 打开文件进行追加写操作
if (file) {
string content;
cout << "请输入要写入的内容(输入EOF结束):" << endl;
while (getline(cin, content)) {
if (content == "EOF") {
break;
}
file << content << endl;
}
file.close();
} else {
cerr << "打开文件失败!" << endl;
}
}
---->// 读取文件内容
void read(const string& filename) {
ifstream file(filename.c_str()); // 打开文件进行读操作
if (file) {
string line;
while (getline(file, line)) {
cout << line << endl;
}
file.close();
} else {
cerr << "打开文件失败!" << endl;
}
}
---->// 删除文件
void remove(const string& filename) {
if (remove(filename.c_str()) == 0) { // 删除文件
cout << "成功删除文件:" << filename << endl;
} else {
cerr << "删除文件失败!" << endl;
}
}
---->主函数
int main() {
while (true) {
printf("________________________欢迎_______________________________\n");
printf("-----------------------------------------------------------\n");
printf("************* Welcome to Fu's Linux system! ***************\n\n");
cout << "请选择操作:1.列文件目录 2.创建文件 3.删除文件 4.读文件 5.写文件 6.退出" << endl;
int choice;
cin >> choice;
cin.ignore(); // 忽略换行符
switch (choice) {
case 1:
dir();
break;
case 2:
cout << "请输入要创建的文件名:";
string createFilename;
getline(cin, createFilename);
create(createFilename);
break;
case 3:
cout << "请输入要删除的文件名:";
string deleteFilename;
getline(cin, deleteFilename);
remove(deleteFilename);
break;
case 4:
cout << "请输入要读取的文件名:";
string readFilename;
getline(cin, readFilename);
read(readFilename);
break;
case 5:
cout << "请输入要写入的文件名:";
string writeFilename;
getline(cin, writeFilename);
write(writeFilename);
break;
case 6:
return 0;
default:
cout << "无效的选择!" << endl;
break;
}
}
return 0;
}