生活随笔
收集整理的這篇文章主要介紹了
《C语言课程设计》一3.1 文件复制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
3.1 文件復制
【例3.1】編寫文本文件復制程序,命令行格式為:mycopy filename1 filename2。
題目分析
每個C語言程序必須定義一個main函數作為程序的入口。程序啟動從main函數開始執行,main函數返回時程序終止,若main函數末尾沒有返回語句,則默認執行return 0語句。
標準C語言的main函數有兩種形式:接受0個參數的int main(void),即int main();接受2個參數的int main(int argc, char *argv[])。對于后者,形參argc表示傳遞給程序的參數個數;形參argv是指針數組,其每個指針分別指向傳遞給程序的字符串參數,第一個字符串argv[0]是程序的名稱。
文件的打開和關閉可調用fopen和fclose函數。文件的讀取和寫入可通過三種方式實現:1)fgetc和fputc函數配合,每次讀寫一個字符,見參考程序mycopyV1.c;2)fscanf和fprintf函數配合,每次讀寫一個字符,見參考程序mycopyV2.c;3)fread和fwrite函數配合,每次讀寫BUFSIZE個字符,見參考程序mycopyV3.c。方式3)通過增設緩沖區buffer[BUFSIZE],減少I/O操作的次數,提高程序運行速度,可用于讀寫量較大的程序。
檢測到異常時,用exit標準庫函數退出。void exit(int status) 函數可正常終止一個程序并執行清理操作,形參status值為0表示程序成功退出,非零值可表示各類異常終止。從main函數通過return語句返回一個整數值相當于用這個整數值調用exit函數。exit函數在頭文件stdlib.h中聲明。
參考程序
/** 文件名: mycopyV1.c * 描述: 編寫文件復制命令行程序,命令行格式為:mycopy filename1 filename2* 作者: 劉博*/#include <stdio.h>
#include <stdlib.h>int main(int argc, char *argv[])
{FILE *fpSrc, *fpDes;char ch;/* 檢查命令行參數個數 */ if (argc != 3) {printf("Usage: mycopy SourceFile DestinationFile\n");exit(1);} /* 打開文件 */ if ((fpSrc = fopen(argv[1], "r")) == NULL) {printf("open file error!\n");exit(1);}if ((fpDes = fopen(argv[2], "w")) == NULL) {printf("creat file error!\n");exit(1); }/* 復制文件 */ while ((ch = fgetc(fpSrc)) != EOF) {fputc(ch, fpDes);}/* 關閉文件 */ fclose(fpSrc);fclose(fpDes);
}/** 文件名: mycopyV2.c * 描述: 編寫文件復制命令行程序,命令行格式為:mycopy filename1 filename2* 作者: 劉博*/#include <stdio.h>
#include <stdlib.h>int main(int argc, char *argv[])
{FILE *fpSrc, *fpDes;char ch;/* 檢查命令行參數個數 */ if (argc != 3) {printf("Usage: mycopy SourceFile DestinationFile\n");exit(1);} /* 打開文件 */ if ((fpSrc = fopen(argv[1], "r")) == NULL) {printf("open file error!\n");exit(1);}if ((fpDes = fopen(argv[2], "w")) == NULL) {printf("creat file error!\n");exit(1); }/* 復制文件 */while (fscanf(fpSrc, "%c", &ch) != EOF) {fprintf(fpDes, "%c", ch);} /* 關閉文件 */ fclose(fpSrc);fclose(fpDes);
}/** 文件名: mycopyV3.c * 描述: 編寫文件復制命令行程序,命令行格式為:mycopy filename1 filename2* 作者: 劉博*/#include <stdio.h>
#include <stdlib.h>#define BUFSIZE 1024int main(int argc, char *argv[])
{FILE *fpSrc, *fpDes;char buffer[BUFSIZE];int in, out; /* 檢查命令行參數個數 */ if (argc != 3) {printf("Usage: mycopy SourceFile DestinationFile\n");exit(1);} /* 打開文件 */ if ((fpSrc = fopen(argv[1], "r")) == NULL) {printf("open file error!\n");exit(1);}if ((fpDes = fopen(argv[2], "w")) == NULL) {printf("creat file error!\n");exit(1); }/* 復制文件 */while ((in = fread(buffer, 1, BUFSIZE, fpSrc)) > 0) { out = fwrite(buffer, 1, in, fpDes);/* 判斷讀出和寫入元素個數是否一致 */if (in != out) {printf("copy error!\n");exit(1);}}/* 關閉文件 */ fclose(fpSrc);fclose(fpDes);
}
總結
以上是生活随笔為你收集整理的《C语言课程设计》一3.1 文件复制的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。