分享

磁盘文件操作

 londonKu 2012-11-06
操作系统实验终于全部做完啦,这是最后一个,是模拟磁盘操作的,大概的理解了题意之后发现其实这个很简单的,原来一直想找个机会联系一下文件操作,这下可好,
好好的熟悉了一下。
注:一定要是绝对路径!
这个程序实现的功能有:
1建立文件
2读文件
3写文件
4删除文件
5建立文件夹
6显示文件夹内的文件列表
7删除文件夹
8显示文件属性
9改写文件属性
由于最近事比较多,心情比较烦,所以文件复制,重命名之类的都没去弄他,回头有时间再看看,总之题目的功能是实现了,一下的代码估计有我没测试到的BUG,仅供参考


#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
void showmenu()
{
        printf("1-建立文件\n");
        printf("2-读文件\n");
        printf("3-写文件\n");
        printf("4-删除文件\n");
        printf("5-建立目录\n");
        printf("6-显示目录内容\n");
        printf("7-删除目录\n");
        printf("8-显示文件属性\n");
        printf("9-改变文件属性\n");
        printf("请选择功能:");
}

int createfile()
{
        int flag;
        char  name[50];
        printf("请输入要创建的文件名称:");
        scanf("%s",name);
        if((flag=open(name,O_CREAT|O_RDWR|O_TRUNC,0700))<0)
        {
                perror("文件创建失败!\n");
                exit(1);
        }
        else
          printf("文件创建成功!\n");
        close(flag);
}

int readfile()
{
        char buffer[100],name[50];
        int fd;
        printf("请输入要读取的文件名称:");
        scanf("%s",name);
        fd=open(name,O_RDONLY);
        if(fd<0)
        {
          printf("文件打开失败!\n");
          exit(1);
        }
        read(fd,buffer,sizeof(buffer));
        printf("%s\n",buffer);
        close(fd);
}

int writefile()
{
        char buffer[100],name[50];
        int fd;
        printf("请输入要写入的文件名称:");
        scanf("%s",name);
        fd=open(name,O_WRONLY);
        if(fd<0)
        {
                printf("文件打开失败!\n");
                exit(1);
        }
        printf("请输入要输入文件的内容:\n");
        getchar();
        scanf("%s",buffer);
        write(fd,buffer,sizeof(buffer));
        close(fd);
}

void deletefile()
{
        char name[50];
        int flag;
        printf("请输入删除的文件名称:");
        scanf("%s",name);
        flag=remove(name);
        if(flag==0)
          printf("文件删除成功!\n");
        else
          printf("文件删除失败!\n");
}

void creatediction()
{
        char name[50];
        printf("请输入目录的名称(以根目录开始):\n");
        scanf("%s",name);
        int flag=mkdir(name,S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH);
        if(flag==0)
          printf("文件夹创建成功!\n");
        else
          printf("文件夹创建失败!\n");
}

int  showdiction()
{
        DIR * dir;
        struct dirent * ptr;
        int i;
        char * name;
        printf("请输入要显示的文件目录名称:\n");
        scanf("%s",name);
        dir=opendir(name);
        ptr=readdir(dir);
        //if(ptr==NULL)
        //{
                //printf("目录为空,请新建一个文件\n");
            //return 0;
        //}
        while((ptr=readdir(dir))!=NULL)
        {
                printf("%s\n",ptr->d_name);
        }
        closedir(dir);
}

int deletediction()
{
        char name[50];
        int flag;
        printf("请输入文件夹的名称:");
        scanf("%s",name);
        flag=rmdir(name);
        if(flag==0)
          printf("文件夹删除成功!\n");
        else
          printf("文件夹不为空,请删除文件!\n");
}

void showmode()
{
        char name[50];
        int flag,n;
        struct stat buf;
        printf("请输入要显示的文件名称:");
        scanf("%s",name);
        flag=stat(name,&buf);
        n=buf.st_mode;
        //printf("%d\n",buf.st_mode);
        switch(n)
        {
                case 33088:
                printf("%s--------500\n",name);
                break;
                case 32960:
                printf("%s--------300\n",name);
                break;
                case 33261:
                printf("%s--------700\n",name);
                break;
                default:
                break;
        }
                if(flag!=0)
                        printf("文件属性显示失败!\n");
}

int changemode()
{
        char name[50];
        int flag,n;
        printf("请输入要改变的文件名称:");
        scanf("%s",name);
        printf("请输入要改变的类型:\n");
        printf("1.只读\n2.只写\n3.可读可写\n");
        scanf("%d",&n);
        switch(n)
        {
                case 1:
                        flag=chmod(name,0500);
                        if(flag==0)
                          printf("文件已改为只读类型!\n");
                        else
                          printf("文件修改失败!\n");
                        break;
                case 2:
                        flag=chmod(name,0300);
                        if(flag==0)
                          printf("文件已改为只写类型!\n");
                        else
                          printf("文件修改失败!\n");
                        break;
                case 3:
                        flag=chmod(name,0700);
                        if(flag==0)
                          printf("文件已改为可读可写类型!\n");
                        else
                          printf("文件修改失败!\n");
                        break;
                default:
                        break;
        }
}
int main()
{
        int n;
        while(1)
        {
                showmenu();
                scanf("%d",&n);
                switch(n)
                {
                        case 1:
                                createfile();
                                break;
                        case 2:
                                readfile();
                                break;
                        case 3:
                                writefile();
                                break;
                        case 4:
                                deletefile();
                                break;
                        case 5:
                                creatediction();
                                break;
                        case 6:
                                showdiction();
                                break;
                        case 7:
                                deletediction();
                                break;
                        case 8:
                                showmode();
                                break;
                        case 9:
                                changemode();
                                break;
                        default:
                                printf("输入有误,请重新选择!\n");
                                break;
                }
        }
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多