一个C语言小程序,有10几个命令和MSDOS一样哦:)
生活随笔
收集整理的這篇文章主要介紹了
一个C语言小程序,有10几个命令和MSDOS一样哦:)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
/*調(diào)用函數(shù)中的scanf前沒有提示,其實在主函數(shù)中輸入時,空格后還可以輸入被調(diào)用函數(shù)中的參數(shù)*/
/*這樣就避免了很多輸出的麻煩,而且看著也比較的舒服:-)例如新建立一個文件,就可以直接輸入mf a.txt(注意,中間有空格)就可以建立一個文本文件了*/
#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)
??????????????? PRF("? mf newfilename");
??????? else
??????? {
??????????????? handle = creatnew(file, 0);
??????????????? if(handle == -1)
??????????????????????? PRF("%s already exists./n", file);
??????????????? else
??????????????????????? PRF("%s successfully created./n", file);
??????? }
}
dir()/*列出當(dāng)前的工作目錄中的文件和目錄*/
{
??????? 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; /*定義一個搜索文件的結(jié)構(gòu)體*/
??????? 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語言里的錯誤處理函數(shù)*/
??????? }
}
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); /*用函數(shù)chdir()更改目錄后,重新給buffer賦值,使其為當(dāng)前目錄*/
??????? }
}
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); /*用函數(shù)chdir()更改目錄后,重新給buffer賦值,使其為當(dāng)前目錄*/
}
cls()/*清屏*/
{
??????? clrscr();
}
ver()/*版本信息,純屬好玩:)*/
{
??????? PRF("This programme is created by mabiqiang!/nVersion 1.0?? 2004-4-14");
}
type()/*顯示文件內(nèi)容*/
{
??????? FILE *fp;
??????? struct ftime ft; /*文件被最后修改的時間日期信息*/
??????? char ch;
??????? int y; /*定義屏幕上橫坐標(biāo)x和縱坐標(biāo)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(); /*取得當(dāng)前的縱坐標(biāo)值*/
??????????????????????? if(y == 25)/*屏幕的高度是25行*/
??????????????????????? {
??????????????????????????????? printf("/n--------more--------");
??????????????????????????????? /*當(dāng)滿屏顯示后就暫停,直到用戶按下任意鍵后,再繼續(xù)顯示以下的內(nèi)容*/
??????????????????????????????? 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()/*編輯一已存在的文件(其實不存在也沒關(guān)系), 有一點小問題就是不能夠修改,只能增加數(shù)據(jù)*/
{
??????? 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()/*復(fù)制文件*/
{
??????? 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"));
??????? }
}
date()/*打印當(dāng)日的日期*/
{
??????? struct date d;
??????? getdate(&d);
??????? PRF("?? Today is %d-%d-%d", d.da_year, d.da_mon, d.da_day);
}
time()/*獲取當(dāng)前的時間*/
{
??????? struct time t;
??????? gettime(&t);
??????? PRF("?? The current time is:%2d:%02d:%02d", t.ti_hour, t.ti_min, t.ti_sec);
}
find()/*在當(dāng)前目錄下搜索指定的文件*/
{
??????? char *p;
??????? struct ffblk ffblk;
??????? int done;
??????? scanf("%s", file);
??????? if(strcmp(file, "/?") == 0)
??????????????? PRF("?? find filename");
??????? else
??????? {
??????????????? PRF("Directory listing of %s:/n", file);
??????????????? done=findfirst(file, &ffblk, 0);
??????????????? while(!done)
??????????????? {
??????????????????????? PRF("? %s/n", ffblk.ff_name);
??????????????????????? done=findnext(&ffblk);
??????????????? }
??????? }
}
change()/*更改驅(qū)動盤*/
{
??????? int disk;
??????? switch(str1[0])/*將輸入字符的第一個字符賦給disk,代表驅(qū)動盤*/
??????? {
??????? case 'a':
??????? case 'A':disk=0; break;
??????? case 'c':
??????? case 'C':disk=2; break;
??????? case 'd':
??????? case 'D':disk=3; break;
??????? case 'e':
??????? case 'E':disk=4; break;
??????? case 'f':
??????? case 'F':disk=5; break;
??????? case 'g':
??????? case 'G':disk=6; break;
??????? case 'h':
??????? case 'H':disk=7; break;
??????? }
??????? setdisk(disk); /*設(shè)置輸入的為當(dāng)前驅(qū)動盤*/
??????? getcwd(buffer, MAXPATH); /*獲取當(dāng)前驅(qū)動盤的目錄*/
}
call()/*調(diào)用子程序并運行*/
{
??????? int result;
??????? scanf("%s", file);
??????? result=spawnl(P_WAIT, file, NULL);
??????? if(result == -1)/*當(dāng)調(diào)用錯誤的時候就終止程序*/
??????? {
??????????????? perror("Error from spawnl");
??????????????? exit(1);
??????? }
}
color()/*設(shè)置當(dāng)前文本顏色*/
{
??????? int txtcol;
??????? scanf("%d", &txtcol); ;
??????? textcolor(txtcol); /*設(shè)置文本顏色*/
??????? clrscr(); /*清屏后才能看到效果*/
}
link()/*將一個文件接到另一個文件的后面*/
{
??????? FILE *fp1, *fp2;
??????? char ch1, ch2, file1[MAXPATH], file2[MAXPATH];
??????? scanf("%s", file1);
??????? scanf("%s", file2);
??????? if((fp1=fopen(file1, "r")) == NULL)
??????????????? PRF("cannot open %s", file1);
??????? /*以a方式打開文件file2時,文件指針已經(jīng)指向該文件的末尾,可以增加數(shù)據(jù)*/
??????? if((fp2=fopen(file2, "a")) == NULL)
??????????????? PRF("cannot open %s", file2);
??????? while(!feof(fp1))
??????? fputc(fgetc(fp1), fp2);
??????? fclose(fp1);
??????? fclose(fp2);
??????? PRF("?? Link %s to %s successfully!", file1, file2);
}
fc()/*比較兩個文件*/
{
??????? FILE *fp1, *fp2;
??????? char ch1, ch2, file1[MAXPATH], file2[MAXPATH];
??????? int flag=0;
??????? scanf("%s", file1);
??????? scanf("%s", file2);
??????? if((fp1=fopen(file1, "r")) == NULL)
??????????????? PRF("cannot open %s", file1);
??????? if((fp2=fopen(file2, "r")) == NULL)
??????????????? PRF("cannot open %s", file2);
??????? while(!feof(fp1) || !feof(fp2))/*當(dāng)文件都沒有結(jié)束的時候,依次比較,若有不同,則退出*/
??????? {
??????????????? ch1=fgetc(fp1);
??????????????? ch2=fgetc(fp2);
??????????????? if(ch1 != ch2)
??????????????? {
??????????????????????? flag=1;
??????????????????????? break;
??????????????? }
??????? }
??????? fclose(fp1);
??????? fclose(fp2);
??????? (flag)?PRF("?? Two fils are different!"):PRF("?? Two fils are the same!");
}
/*這里可以寫自己編寫的命令函數(shù)*/
help()/*幫助文件*/
{
??????? PRF("?? mf??? used to creat a new text file/n");
??????? PRF("?? dir?? used to show all the files of current directory/n");
??????? PRF("?? del?? used to delete a already exist file/n");
??????? PRF("?? cd??? used to go to a new directory/n");
??????? PRF("?? cd..? used to go to the directory upon this one/n");
??????? PRF("?? cls?? used to clean the screen/n");
??????? PRF("?? ver?? used to show the version of this programme/n");
??????? PRF("?? type? used to show contents of a already exist file/n");
??????? PRF("?? edit? used to edit a file and end with character '$'/n");
??????? PRF("?? copy? used to copy a already exist file to another place/n");
??????? PRF("?? ren?? used to rename a already exist file/n");
??????? PRF("?? md??? used to make a new directory/n");
??????? PRF("?? rd??? used to delete a already exist and empty directory/n");
??????? PRF("?? date? used to show today's date/n");
??????? PRF("?? time? used to show today's time/n");
??????? PRF("?? find? used to find a file's in current directory/n");
??????? PRF("?? call? used to call a already exist programme and run it/n");
??????? PRF("?? color used to change the text's color/n");
??????? PRF("?? fc??? used to compete two files/n");
??????? PRF("?? link? used to copy a file's contents to another file/n");
??????? PRF("All orders can input with file's or directory's name without cls cd.. and ver/n");
??????? PRF("You can enter like this 'orders /?' for help/n");
}
main()
{
??????? int flag; /*用于判斷輸入字符串和命令是否相等, 相等則返回零*/
??????? PRF("Copyright by MaBiQiang!2004-4-14/nYou can E-mail to me:mxbgq@sohu.com./n");
??????? getcwd(buffer, MAXPATH); /*取得當(dāng)前工作目錄*/
??????? PRF("%s>", buffer);
??????? while(strcmp(str1, "exit") != 0)
??????? {
??????????????? scanf("%s", str1);
??????????????? if(strcmp(str1, "?") == 0 || strcmp(str1, "help") == 0)
??????????????????????? help();
??????????????? else
??????????????????????? if(strcmp(str1, "mf") == 0)flag=1; /*給flag賦不同的值,就執(zhí)行不同的命令*/
??????????????????????? else if(strcmp(str1, "dir") == 0)flag=2;
??????????????????????? else if(strcmp(str1, "del") == 0)flag=3;
??????????????????????? else if(strcmp(str1, "cd") == 0)flag=4;
??????????????????????? else if(strcmp(str1, "cd..") == 0)flag=5;
??????????????????????? else if(strcmp(str1, "cls") == 0)flag=6;
??????????????????????? else if(strcmp(str1, "ver") == 0)flag=7;
??????????????????????? else if(strcmp(str1, "type") == 0)flag=8;
??????????????????????? else if(strcmp(str1, "edit") == 0)flag=9;
??????????????????????? else if(strcmp(str1, "copy") == 0)flag=10;
??????????????????????? else if(strcmp(str1, "ren") == 0)flag=11;
??????????????????????? else if(strcmp(str1, "md") == 0)flag=12;
??????????????????????? else if(strcmp(str1, "rd") == 0)flag=13;
??????????????????????? else if(strcmp(str1, "date") == 0)flag=14;
??????????????????????? else if(strcmp(str1, "time") == 0)flag=15;
??????????????????????? else if(strcmp(str1, "find") == 0)flag=16;
??????????????????????? else if(strcmp(str1, "A:") == 0 || strcmp(str1, "a:") == 0)flag=17;
??????????????????????? else if(strcmp(str1, "C:") == 0 || strcmp(str1, "c:") == 0)flag=18;
??????????????????????? else if(strcmp(str1, "D:") == 0 || strcmp(str1, "d:") == 0)flag=19;
??????????????????????? else if(strcmp(str1, "E:") == 0 || strcmp(str1, "e:") == 0)flag=20;
??????????????????????? else if(strcmp(str1, "F:") == 0 || strcmp(str1, "f:") == 0)flag=21;
??????????????????????? else if(strcmp(str1, "G:") == 0 || strcmp(str1, "g:") == 0)flag=22;
??????????????????????? else if(strcmp(str1, "H:") == 0 || strcmp(str1, "h:") == 0)flag=23;
??????????????????????? else if(strcmp(str1, "call") == 0)flag=24;
??????????????????????? else if(strcmp(str1, "color") == 0)flag=25;
??????????????????????? else if(strcmp(str1, "fc") == 0)flag=26;
??????????????????????? else if(strcmp(str1, "link") == 0)flag=27;
??????????????????????? else if(strcmp(str1, "exit") == 0)break;
??????????????????????? /*這里可以加入想要增加的命令,同上*/
??????????????? else PRF("'%s' is not a effect order of this programme!/n", str1);
???????????????????????
??????????????? switch(flag)/*根據(jù)輸入調(diào)用命令行*/
??????????????? {
??????????????? case 1:makefile(); flag=0; break;
??????????????? case 2:dir(); flag=0; break;
??????????????? case 3:del(); flag=0; break;
??????????????? case 4:cd(); flag=0; break;
??????????????? case 5:cdup(); flag=0; break;
??????????????? case 6:cls(); flag=0; break;
??????????????? case 7:ver(); flag=0; break;
??????????????? case 8:type(); flag=0; break;
??????????????? case 9:edit(); flag=0; break;
??????????????? case 10:copy(); flag=0; break;
??????????????? case 11:ren(); flag=0; break;
??????????????? case 12:mdir(); flag=0; break;
??????????????? case 13:rdir(); flag=0; break;
??????????????? case 14:date(); flag=0; break;
??????????????? case 15:time(); flag=0; break;
??????????????? case 16:find(); flag=0; break;
??????????????? case 17:
??????????????? case 18:
??????????????? case 19:
??????????????? case 20:
??????????????? case 21:
??????????????? case 22:
??????????????? case 23:change(); flag=0; break;
??????????????? case 24:call(); flag=0; break;
??????????????? case 25:color(); flag=0; break;
??????????????? case 26:fc(); flag=0; break;
??????????????? case 27:link(); flag=0; break;
??????????????????????? /*這里可以加入想要增加的命令的調(diào)用函數(shù),同上*/
??????????????? }
??????????????? PRF("/n%s>", buffer);
??????? }
}
/*這樣就避免了很多輸出的麻煩,而且看著也比較的舒服:-)例如新建立一個文件,就可以直接輸入mf a.txt(注意,中間有空格)就可以建立一個文本文件了*/
#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)
??????????????? PRF("? mf newfilename");
??????? else
??????? {
??????????????? handle = creatnew(file, 0);
??????????????? if(handle == -1)
??????????????????????? PRF("%s already exists./n", file);
??????????????? else
??????????????????????? PRF("%s successfully created./n", file);
??????? }
}
dir()/*列出當(dāng)前的工作目錄中的文件和目錄*/
{
??????? 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; /*定義一個搜索文件的結(jié)構(gòu)體*/
??????? 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語言里的錯誤處理函數(shù)*/
??????? }
}
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); /*用函數(shù)chdir()更改目錄后,重新給buffer賦值,使其為當(dāng)前目錄*/
??????? }
}
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); /*用函數(shù)chdir()更改目錄后,重新給buffer賦值,使其為當(dāng)前目錄*/
}
cls()/*清屏*/
{
??????? clrscr();
}
ver()/*版本信息,純屬好玩:)*/
{
??????? PRF("This programme is created by mabiqiang!/nVersion 1.0?? 2004-4-14");
}
type()/*顯示文件內(nèi)容*/
{
??????? FILE *fp;
??????? struct ftime ft; /*文件被最后修改的時間日期信息*/
??????? char ch;
??????? int y; /*定義屏幕上橫坐標(biāo)x和縱坐標(biāo)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(); /*取得當(dāng)前的縱坐標(biāo)值*/
??????????????????????? if(y == 25)/*屏幕的高度是25行*/
??????????????????????? {
??????????????????????????????? printf("/n--------more--------");
??????????????????????????????? /*當(dāng)滿屏顯示后就暫停,直到用戶按下任意鍵后,再繼續(xù)顯示以下的內(nèi)容*/
??????????????????????????????? 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()/*編輯一已存在的文件(其實不存在也沒關(guān)系), 有一點小問題就是不能夠修改,只能增加數(shù)據(jù)*/
{
??????? 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()/*復(fù)制文件*/
{
??????? 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"));
??????? }
}
date()/*打印當(dāng)日的日期*/
{
??????? struct date d;
??????? getdate(&d);
??????? PRF("?? Today is %d-%d-%d", d.da_year, d.da_mon, d.da_day);
}
time()/*獲取當(dāng)前的時間*/
{
??????? struct time t;
??????? gettime(&t);
??????? PRF("?? The current time is:%2d:%02d:%02d", t.ti_hour, t.ti_min, t.ti_sec);
}
find()/*在當(dāng)前目錄下搜索指定的文件*/
{
??????? char *p;
??????? struct ffblk ffblk;
??????? int done;
??????? scanf("%s", file);
??????? if(strcmp(file, "/?") == 0)
??????????????? PRF("?? find filename");
??????? else
??????? {
??????????????? PRF("Directory listing of %s:/n", file);
??????????????? done=findfirst(file, &ffblk, 0);
??????????????? while(!done)
??????????????? {
??????????????????????? PRF("? %s/n", ffblk.ff_name);
??????????????????????? done=findnext(&ffblk);
??????????????? }
??????? }
}
change()/*更改驅(qū)動盤*/
{
??????? int disk;
??????? switch(str1[0])/*將輸入字符的第一個字符賦給disk,代表驅(qū)動盤*/
??????? {
??????? case 'a':
??????? case 'A':disk=0; break;
??????? case 'c':
??????? case 'C':disk=2; break;
??????? case 'd':
??????? case 'D':disk=3; break;
??????? case 'e':
??????? case 'E':disk=4; break;
??????? case 'f':
??????? case 'F':disk=5; break;
??????? case 'g':
??????? case 'G':disk=6; break;
??????? case 'h':
??????? case 'H':disk=7; break;
??????? }
??????? setdisk(disk); /*設(shè)置輸入的為當(dāng)前驅(qū)動盤*/
??????? getcwd(buffer, MAXPATH); /*獲取當(dāng)前驅(qū)動盤的目錄*/
}
call()/*調(diào)用子程序并運行*/
{
??????? int result;
??????? scanf("%s", file);
??????? result=spawnl(P_WAIT, file, NULL);
??????? if(result == -1)/*當(dāng)調(diào)用錯誤的時候就終止程序*/
??????? {
??????????????? perror("Error from spawnl");
??????????????? exit(1);
??????? }
}
color()/*設(shè)置當(dāng)前文本顏色*/
{
??????? int txtcol;
??????? scanf("%d", &txtcol); ;
??????? textcolor(txtcol); /*設(shè)置文本顏色*/
??????? clrscr(); /*清屏后才能看到效果*/
}
link()/*將一個文件接到另一個文件的后面*/
{
??????? FILE *fp1, *fp2;
??????? char ch1, ch2, file1[MAXPATH], file2[MAXPATH];
??????? scanf("%s", file1);
??????? scanf("%s", file2);
??????? if((fp1=fopen(file1, "r")) == NULL)
??????????????? PRF("cannot open %s", file1);
??????? /*以a方式打開文件file2時,文件指針已經(jīng)指向該文件的末尾,可以增加數(shù)據(jù)*/
??????? if((fp2=fopen(file2, "a")) == NULL)
??????????????? PRF("cannot open %s", file2);
??????? while(!feof(fp1))
??????? fputc(fgetc(fp1), fp2);
??????? fclose(fp1);
??????? fclose(fp2);
??????? PRF("?? Link %s to %s successfully!", file1, file2);
}
fc()/*比較兩個文件*/
{
??????? FILE *fp1, *fp2;
??????? char ch1, ch2, file1[MAXPATH], file2[MAXPATH];
??????? int flag=0;
??????? scanf("%s", file1);
??????? scanf("%s", file2);
??????? if((fp1=fopen(file1, "r")) == NULL)
??????????????? PRF("cannot open %s", file1);
??????? if((fp2=fopen(file2, "r")) == NULL)
??????????????? PRF("cannot open %s", file2);
??????? while(!feof(fp1) || !feof(fp2))/*當(dāng)文件都沒有結(jié)束的時候,依次比較,若有不同,則退出*/
??????? {
??????????????? ch1=fgetc(fp1);
??????????????? ch2=fgetc(fp2);
??????????????? if(ch1 != ch2)
??????????????? {
??????????????????????? flag=1;
??????????????????????? break;
??????????????? }
??????? }
??????? fclose(fp1);
??????? fclose(fp2);
??????? (flag)?PRF("?? Two fils are different!"):PRF("?? Two fils are the same!");
}
/*這里可以寫自己編寫的命令函數(shù)*/
help()/*幫助文件*/
{
??????? PRF("?? mf??? used to creat a new text file/n");
??????? PRF("?? dir?? used to show all the files of current directory/n");
??????? PRF("?? del?? used to delete a already exist file/n");
??????? PRF("?? cd??? used to go to a new directory/n");
??????? PRF("?? cd..? used to go to the directory upon this one/n");
??????? PRF("?? cls?? used to clean the screen/n");
??????? PRF("?? ver?? used to show the version of this programme/n");
??????? PRF("?? type? used to show contents of a already exist file/n");
??????? PRF("?? edit? used to edit a file and end with character '$'/n");
??????? PRF("?? copy? used to copy a already exist file to another place/n");
??????? PRF("?? ren?? used to rename a already exist file/n");
??????? PRF("?? md??? used to make a new directory/n");
??????? PRF("?? rd??? used to delete a already exist and empty directory/n");
??????? PRF("?? date? used to show today's date/n");
??????? PRF("?? time? used to show today's time/n");
??????? PRF("?? find? used to find a file's in current directory/n");
??????? PRF("?? call? used to call a already exist programme and run it/n");
??????? PRF("?? color used to change the text's color/n");
??????? PRF("?? fc??? used to compete two files/n");
??????? PRF("?? link? used to copy a file's contents to another file/n");
??????? PRF("All orders can input with file's or directory's name without cls cd.. and ver/n");
??????? PRF("You can enter like this 'orders /?' for help/n");
}
main()
{
??????? int flag; /*用于判斷輸入字符串和命令是否相等, 相等則返回零*/
??????? PRF("Copyright by MaBiQiang!2004-4-14/nYou can E-mail to me:mxbgq@sohu.com./n");
??????? getcwd(buffer, MAXPATH); /*取得當(dāng)前工作目錄*/
??????? PRF("%s>", buffer);
??????? while(strcmp(str1, "exit") != 0)
??????? {
??????????????? scanf("%s", str1);
??????????????? if(strcmp(str1, "?") == 0 || strcmp(str1, "help") == 0)
??????????????????????? help();
??????????????? else
??????????????????????? if(strcmp(str1, "mf") == 0)flag=1; /*給flag賦不同的值,就執(zhí)行不同的命令*/
??????????????????????? else if(strcmp(str1, "dir") == 0)flag=2;
??????????????????????? else if(strcmp(str1, "del") == 0)flag=3;
??????????????????????? else if(strcmp(str1, "cd") == 0)flag=4;
??????????????????????? else if(strcmp(str1, "cd..") == 0)flag=5;
??????????????????????? else if(strcmp(str1, "cls") == 0)flag=6;
??????????????????????? else if(strcmp(str1, "ver") == 0)flag=7;
??????????????????????? else if(strcmp(str1, "type") == 0)flag=8;
??????????????????????? else if(strcmp(str1, "edit") == 0)flag=9;
??????????????????????? else if(strcmp(str1, "copy") == 0)flag=10;
??????????????????????? else if(strcmp(str1, "ren") == 0)flag=11;
??????????????????????? else if(strcmp(str1, "md") == 0)flag=12;
??????????????????????? else if(strcmp(str1, "rd") == 0)flag=13;
??????????????????????? else if(strcmp(str1, "date") == 0)flag=14;
??????????????????????? else if(strcmp(str1, "time") == 0)flag=15;
??????????????????????? else if(strcmp(str1, "find") == 0)flag=16;
??????????????????????? else if(strcmp(str1, "A:") == 0 || strcmp(str1, "a:") == 0)flag=17;
??????????????????????? else if(strcmp(str1, "C:") == 0 || strcmp(str1, "c:") == 0)flag=18;
??????????????????????? else if(strcmp(str1, "D:") == 0 || strcmp(str1, "d:") == 0)flag=19;
??????????????????????? else if(strcmp(str1, "E:") == 0 || strcmp(str1, "e:") == 0)flag=20;
??????????????????????? else if(strcmp(str1, "F:") == 0 || strcmp(str1, "f:") == 0)flag=21;
??????????????????????? else if(strcmp(str1, "G:") == 0 || strcmp(str1, "g:") == 0)flag=22;
??????????????????????? else if(strcmp(str1, "H:") == 0 || strcmp(str1, "h:") == 0)flag=23;
??????????????????????? else if(strcmp(str1, "call") == 0)flag=24;
??????????????????????? else if(strcmp(str1, "color") == 0)flag=25;
??????????????????????? else if(strcmp(str1, "fc") == 0)flag=26;
??????????????????????? else if(strcmp(str1, "link") == 0)flag=27;
??????????????????????? else if(strcmp(str1, "exit") == 0)break;
??????????????????????? /*這里可以加入想要增加的命令,同上*/
??????????????? else PRF("'%s' is not a effect order of this programme!/n", str1);
???????????????????????
??????????????? switch(flag)/*根據(jù)輸入調(diào)用命令行*/
??????????????? {
??????????????? case 1:makefile(); flag=0; break;
??????????????? case 2:dir(); flag=0; break;
??????????????? case 3:del(); flag=0; break;
??????????????? case 4:cd(); flag=0; break;
??????????????? case 5:cdup(); flag=0; break;
??????????????? case 6:cls(); flag=0; break;
??????????????? case 7:ver(); flag=0; break;
??????????????? case 8:type(); flag=0; break;
??????????????? case 9:edit(); flag=0; break;
??????????????? case 10:copy(); flag=0; break;
??????????????? case 11:ren(); flag=0; break;
??????????????? case 12:mdir(); flag=0; break;
??????????????? case 13:rdir(); flag=0; break;
??????????????? case 14:date(); flag=0; break;
??????????????? case 15:time(); flag=0; break;
??????????????? case 16:find(); flag=0; break;
??????????????? case 17:
??????????????? case 18:
??????????????? case 19:
??????????????? case 20:
??????????????? case 21:
??????????????? case 22:
??????????????? case 23:change(); flag=0; break;
??????????????? case 24:call(); flag=0; break;
??????????????? case 25:color(); flag=0; break;
??????????????? case 26:fc(); flag=0; break;
??????????????? case 27:link(); flag=0; break;
??????????????????????? /*這里可以加入想要增加的命令的調(diào)用函數(shù),同上*/
??????????????? }
??????????????? PRF("/n%s>", buffer);
??????? }
}
轉(zhuǎn)載于:https://www.cnblogs.com/carekee/articles/2569779.html
總結(jié)
以上是生活随笔為你收集整理的一个C语言小程序,有10几个命令和MSDOS一样哦:)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript 运算优先级
- 下一篇: 《那些年啊,那些事——一个程序员的奋斗史