第一種方法:例如 linux 下的系統調用
#include <stdio.h>#include <dirent.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>char buff[1024];int len;int main(int argc, char const *argv[]){ char const *src_path = argv[1]; char const *des_path = argv[2]; int fd,fd2; fd = open(src_path,O_RDWR|O_CREAT); fd2 = open(des_path,O_RDWR|O_CREAT); while(len = read(fd,buff,1024)) { write(fd2,buff,len); } return 0;}這里主要 用到的函數是 open,read,write其中open 函數:
第一個參數為要打開文件的路徑,第二個參數是功能flag,O_RDWR表示以讀寫方式打開文件,O_CREAT表示如果文件不存在則創建
返回一個文件描述符,表示打開了的文件
其中 read 函數:
第一個參數是一個文件描述符,表示:從該文件描述符表示的文件讀取數據
第二個參數是把從文件讀到的信息放在一個緩沖數組中
第三個參數是讀一次讀多少字節
其中 write 函數:
第一個參數,是把數據寫到哪里(寫到哪個文件描述符中)
第二個參數:把緩沖數組中的數據寫到文件描述符中
第三個參數:表示一次寫多少字節
注意:最好向上面代碼那樣用一個while循環來讀寫數據,這樣的話,read 中的第三個參數就不用設置成太大,因為他會把數據全讀完才退出循環
第二種方法:用文件流
#include <stdio.h>#include <dirent.h>#include <stdlib.h>#include <string.h>char buff[1024];int len;int main(int argc, char const *argv[]){ FILE *in,*out; char const * src_path = argv[1]; //要被拷貝的文件路徑 char const * des_path = argv[2]; //拷貝的文件放在哪里(路徑) in = fopen(argv[1],"r+"); out = fopen(argv[2],"w+"); while(len = fread(buff,1,sizeof(buff),in)) { fwrite(buff,1,len,out); } return 0;}兩種方法其實有異曲同工之妙,第一種方法的文件描述符 = 第二種方法的文件流指針 in 和 out。
新聞熱點
疑難解答