C實例編程:利用C語言小程序來解決大問題

字號:

我們知道c語言的功能非常強(qiáng)大, 很適合編寫系統(tǒng)軟件。利用它我們可以很容易地解決經(jīng)常遇到的一些棘手的問題,如拷貝隱含或系統(tǒng)屬性的文件(特別是光盤中的隱含文件)、在任意dos版本或在windows中更改子目錄的名稱、在任意dos 版本中使用帶空格的目錄名等等。這些問題僅靠操作系統(tǒng)或常用的工具軟件往往很難湊效。我們可以利用c語言的強(qiáng)大功能來編寫一些小程序,能夠很順利地解決這些問題。
    一、拷貝隱含或系統(tǒng)屬性的文件
    使用操作系統(tǒng)提供的拷貝命令不能拷貝隱含或系統(tǒng)屬性的文件,因為在拷貝過程中系統(tǒng)會提示“file not found”。下面的小程序可以解決這個問題。
    // copyfile.c
    # include $#@60; stdio.h $#@62;
    # include $#@60; stdlib.h $#@62;
    main(int argc,char *argv[])
    { if(argc$#@60; 3)
    {
    printf(\"\\n用法: copyfile
    $#@60; 源文件名 $#@62; $#@60; 目標(biāo)文件名 $#@62;\\n\");
    exit(1);
    }
    copy(argv[1],argv[2]);
    }
    copy(char * file1,char * file2)
    {
    char ch;
    file * fp1,* fp2;
    if((fp1=fopen(file1,\"rb\"))==null)
    {
    printf(\"\\ncant open file %s\",file1);
    fclose(fp1);
    return;
    }
    if((fp2=fopen(file2,\"wb\"))==null)
    {
    printf(\"\\ncant open file %s\",file2);
    fclose(fp1);
    return;
    }
    ch=fgetc(fp1);
    while (!feof(fp1))
    {
    fputc(ch,fp2);
    ch=fgetc(fp1);
    }
    fclose(fp1);
    fclose(fp2);
    return;
    }
    二、在任意dos版本或windows中更改子目錄的名稱
    dos 只是在 6. x 版本中提供了更改子錄名的程序。 在windows中改目錄名操作又很繁瑣。 下面的小程序可以很簡單地更改任何一級子目錄的名稱,而且也可以用來更改文件的名稱。
    # include \"stdio.h\"
    main(int argc,char *argv[])
    { int n;
    if(argc$#@60; 3)
    {
    printf(\"required parameter missing\\n\");
    exit(0);
    }
    n=rename(argv[1],argv[2]);
    if(n==-1)
    {
    printf(\"duplicate name or name not found\\n\");
    exit(0);
    }
    }
    三、使用帶空格的目錄名
    ≈謁苤?,在Dos 中是不允許在文件名或子目錄名中包含空格的。這是因為系統(tǒng)是用空格來區(qū)分輸入的dos 命令所帶的參數(shù),同樣使用dos的 md、cd、rd等命令也無法使用含有空格的目錄名。但是在用chkdsk命令對磁盤進(jìn)行檢查時,對含有空格的子目錄名并不給出錯誤信息。這說明在dos 中含有空格的目錄名是有存在的合法性的。因為dos 中的命令無法使用含空格的目錄名,所以可以起到一定的加密作用。下面的程序介紹如何利用c語言來建立、進(jìn)入和刪除含有空格的子目錄。
    1、建立帶空格的子目錄
    /* 文件名: mddir.c */
    #include $#@60; dir.h $#@62;
    main(int argc,char * argv[])
    { if (argc==2)
    {if(mkdir(argv[1])) perror(\"error\");}
    else printf(\"usage : mddir + dirname\\n\");
    return (0);
    }
    在程序使用中注意要用雙引號將目錄名括起來,如果目錄名中不含有空格可將雙引號省略。例如: mddir \"a test\" 。以下程序使用方法相同
    2、進(jìn)入帶空格的子目錄
    /* 文件名: cddir.c */
    #include $#@60; dir.h $#@62;
    main(int argc,char * argv[])
    { if(argc==2)
    {if(chdir(argv[1])) perror(\"error\");}
    else printf(\"usage : cddir + dirname\\n\");
    return 0;
    }
    3、刪除帶空格的子目錄
    /* 文件名: rddir.c */
    #include $#@60; dir.h $#@62;
    main(int argc,char * argv[])
    { if (argc==2)
    {if(rmdir(argv[1])) perror(\"error\");}
    else printf(\"usage : rddir + dirname\\n\");
    return 0;
    }
    以上程序均用 turbo c 2.0 調(diào)試通過,注意以上程序的文件名不要與dos中的有關(guān)命令相同,以免發(fā)生沖突