⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ms dos.c

📁 C语言实现的MS-DOS
💻 C
📖 第 1 页 / 共 2 页
字号:
#include<stdio.h>
#include<dir.h>
#include<string.h>
#include<conio.h>
#include<errno.h>
#include<dos.h>
#include<io.h>
#include<process.h>
#define PRF printf
char buffer[MAXPATH], str1[12]; 
char file[MAXPATH]; 
/*buffer用来存储工作目录, 定义为全局变量,在用cd..和cd命令有用*/
makefile()/*建立一个新文件*/
{ 
        int handle;
        scanf("%s", file);
        if((strcmp(file, "/?") == 0)
          {
             printf("mf newfilename");
          }
        else
          {
                handle = creatnew(file, 0);
                if(handle == -1)
                        printf("%s already exists.\n", file);
                else
                        printf("%s successfully created.\n", file);
         }
}
dir()/*列出当前的工作目录中的文件和目录*/
{
        char para[6];
        scanf("%s", para);
        if(strcmp(para, "/?" == 0)
                PRF("  dir [/b][/m][/p][|more]\n";
        else
                if(strcmp(para, "/w" == 0)system("dir/w";
                else if(strcmp(para, "/b" == 0)system("dir/b";
                else if(strcmp(para, "|more" == 0)system("dir|more";
                else if(strcmp(para, "/b|more" == 0)system("dir/b|more";
                else if(strcmp(para, "/w|more" == 0)system("dir/w|more";
                else if(strcmp(para, "/p" == 0)system("dir/p";
                else PRF("'dir' have no '%s' parameter", para);
}
del()/*删除文件*/
{
        struct ffblk ffblk; /*定义一个搜索文件的结构体*/
        int done, flag=0, i;
        scanf("%s", file);
        for(i=0; i<strlen(file); i++)
        if(file[i] == '?' || file[i] == '*')
        {
                flag=1;
                break;
        }
        if(strcmp(file, "/?" == 0)
                PRF("  del filename    del *.extendname";
        else if(flag)/*删除一特定文件*/
        {
                done=findfirst(file, &ffblk, 0);
                while(!done)
                {
                        remove(ffblk.ff_name); /*删除找到符合条件的文件*/
                        done=findnext(&ffblk);
                }
                PRF("All files that accord to your conditions were deleted!\n";
        }
        else
        {
                if(remove(file) == 0)
                        PRF("Removed %s successfully!\n", file);
                else
                        perror("remove"; /*perror()是c语言里的错误处理函数*/
        }
}
cd()/*进入选定目录*/
{
        char dirname[MAXPATH];
        scanf("%s", dirname);
        if(strcmp(dirname, "/?" == 0)
                PRF("  cd directoryname";
        else
        {
                strcpy(buffer, dirname); /*将输入的目录名赋给buffer*/
                if(chdir(buffer))/*更改工作目录*/
                        perror("chdir()";
                getcwd(buffer, MAXPATH); /*用函数chdir()更改目录后,重新给buffer赋值,使其为当前目录*/
        }
}
cdup()/*返回到上层目录, 有点小问题拉*/
{
        char str_1[MAXPATH], *p;
        int n;
        strcpy(str_1, buffer);
        n=strlen(str_1); /*n存储工作目录buffer字符串的长度*/
        p=str_1+n; /*使指针指向字符串的最后一个字符*/
        while((*p) != '\\')
        p--;
        *p='\0'; /*在指针指向str_1的地方重新赋值*/
        strcpy(buffer, str_1);
        if(chdir(buffer))/*更改工作目录*/
                perror("chdir()";
        getcwd(buffer, MAXPATH); /*用函数chdir()更改目录后,重新给buffer赋值,使其为当前目录*/
}
cls()/*清屏*/
{
        clrscr();
}
ver()/*版本信息,纯属好玩*/
{
        PRF("This programme is created by mabiqiang!\nVersion 1.0   2004-4-14";
}
type()/*显示文件内容*/
{
        FILE *fp;
        struct ftime ft; /*文件被最后修改的时间日期信息*/
        char ch;
        int y; /*定义屏幕上横坐标x和纵坐标y*/
        scanf("%s", file);
        if(strcmp(file, "/?" == 0)
                PRF("  type filename(include extend name)";
        else
        {
                if((fp=fopen(file, "r") == NULL)
                        PRF("cannot open %s", file);
                while(!feof(fp))
                {
                        ch=fgetc(fp);
                        PRF("%c", ch);
                        y=wherey(); /*取得当前的纵坐标值*/
                        if(y == 25)/*屏幕的高度是25行*/
                        {
                                printf("\n--------more--------";
                                /*当满屏显示后就暂停,直到用户按下任意键后,再继续显示以下的内容*/
                                getch();
                                clrscr();
                        }
                }
                PRF("\n\n   This file was modified at ";
                getftime(fileno(fp), &ft); /*取得文件最后修改的时间日期信息*/
                PRF("%u:%u:%u   ", ft.ft_hour, ft.ft_min, ft.ft_tsec*2);
                PRF("%u/%u/%u\n", ft.ft_month, ft.ft_day, ft.ft_year+1980);
                fclose(fp);
        }
}
edit()/*编辑一已存在的文件(其实不存在也没关系), 有一点小问题就是不能够修改,只能增加数据*/
{
        FILE *fp;
        char ch1, ch2;
        scanf("%s", file);
        if(strcmp(file, "/?" == 0)
                PRF("  edit filename(include extend name)";
        else
        {
                if((fp=fopen(file, "a+") == NULL)
                        PRF("cannot open %s", file);
                while(!feof(fp))
                {
                        ch1=fgetc(fp);
                        PRF("%c", ch1);
                }
                getchar(); /*清除缓存中的回车字符*/
                ch2=getchar();
                while(ch2 != '$')
                {
                        fputc(ch2, fp);
                        ch2=getchar();
                }
                fclose(fp);
        }
}
copy()/*复制文件*/
{
        FILE *in, *out;
        char ch, infile[MAXPATH], outfile[MAXPATH];
        scanf("%s", infile);
        scanf("%s", outfile);
        if((in=fopen(infile, "r") == NULL)
                PRF("cannot open %s", infile);
        if((out=fopen(outfile, "w+") == NULL)
                PRF("cannot open %s", outfile);
        while(!feof(in))
        fputc(fgetc(in), out);
        fclose(in);
        fclose(out);
        PRF("   1 files was copied!";
}
ren()/*改文件名*/
{
        char oldname[MAXPATH], newname[MAXPATH];
        scanf("%s", oldname); /*原文件名*/
        scanf("%s", newname); /*新文件名*/
        if(rename(oldname, newname) == 0)
                PRF("Renamed %s to %s successfully!\n", oldname, newname);
        else
                perror("rename";
}
mdir()/*建立目录*/
{
        int status;
        char dirname[MAXPATH];
        scanf("%s", dirname);
        if(strcmp(dirname, "/?" == 0)
                PRF("  md directoryname\n";
        else
        {
                status = mkdir(dirname);
                (!status)?(PRF("Directory created successfully!\n")PRF("Unable to create directory\n");
        }
}
rdir()/*删除目录*/
{
        int status;
        char dirname[MAXPATH];
        scanf("%s", dirname);
        if(strcmp(dirname, "/?" == 0)
                PRF("  rd directoryname\n";
        else
        {
                status = rmdir(dirname);
                (!status)?(PRF("Directory deleted successfully!\n")perror("Unable to delete directory");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -