比如說(shuō), E盤下有個(gè)1.txt的文件, 你要復(fù)制到D盤, 可以這樣:
創(chuàng)新互聯(lián)2013年開(kāi)創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、成都做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元儀征做網(wǎng)站,已為上家服務(wù),為儀征各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
system("copy E:\1.txt D:\1.txt");
這樣D盤下會(huì)出來(lái)和E盤一1.txt內(nèi)容一樣的文件.
不應(yīng)對(duì)非文本文件使用fgetc等易受干擾的函數(shù),建議用fread,fwrite讀寫二進(jìn)制文件
#include "stdio.h"
/* 保護(hù)硬盤,絕對(duì)不要一個(gè)字節(jié)一個(gè)字節(jié)復(fù)制 */
#define SIZEOFBUFFER 256*1024L /* 緩沖區(qū)大小,默認(rèn)為256KB */
long filesize(FILE *stream)
{
long curpos, length;
curpos = ftell(stream);
fseek(stream, 0L, SEEK_END);
length = ftell(stream);
fseek(stream, curpos, SEEK_SET);
return length;
}
int copyfile(const char* src,const char* dest)
{
FILE *fp1,*fp2;
int fsize,factread;
static unsigned char buffer[SIZEOFBUFFER];
fp1=fopen(src,"rb");
fp2=fopen(dest,"wb+");
if (!fp1 || !fp2) return 0;
for (fsize=filesize(fp1);fsize0;fsize-=SIZEOFBUFFER)
{
factread=fread(buffer,1,SIZEOFBUFFER,fp1);
fwrite(buffer,factread,1,fp2);
}
fclose(fp1);
fclose(fp2);
return 1;
}
int main()
{
copyfile("file1.txt","file2.txt");
return 0;
}
C語(yǔ)言復(fù)制文件主要由三種辦法,你可以根據(jù)自己的知識(shí)選用一個(gè)
方法1)利用C語(yǔ)言的二進(jìn)制讀寫函數(shù)
自己用fopen打開(kāi)源文件和目標(biāo)文件,然后用循環(huán)讀寫實(shí)現(xiàn)復(fù)制
方法2)利用操作系統(tǒng)的文件復(fù)制函數(shù)
例如Windows就有如下API函數(shù)可以復(fù)制文件
BOOL CopyFile(
LPCTSTR lpExistingFileName, // name of an existing file
LPCTSTR lpNewFileName, // name of new file
BOOL bFailIfExists // operation if file exists
);
第一個(gè)參數(shù)是用來(lái)存放當(dāng)前要處理文件的路徑。
第二個(gè)參數(shù)是用來(lái)存放用戶指定的新路徑。
第三個(gè)參數(shù)它是用來(lái)判斷用戶指定的新路徑是否已經(jīng)存在要存放的路徑,如果為TRUE,則新路徑中已經(jīng)存在該文件了,該函數(shù)調(diào)用失敗,否則就調(diào)用成功。
方法3:C語(yǔ)言調(diào)用操作系統(tǒng)的copy命令
首先#includestdlib.h
然后 程序中 調(diào)用 system(“這里寫 copy的完整命令”);
C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的文件復(fù)制功能,Linux環(huán)境下。
思路步驟:(下代碼最重要的邏輯步驟清晰)
第一步:打開(kāi)源文件(要復(fù)制的文件),打開(kāi)文件的方式以讀的方式就可以了。
Linux C打開(kāi)文件的庫(kù)函數(shù)有:int open(const char *pathname,int flags),int open(const char *pathname,mode_t mode),以及 FILE *fopen(const char *path,const char *mode),FILE *fdopen(int fd,const char *mode),這幾個(gè)函數(shù),具體的使用方法就查看manual就可以了。
第二步:創(chuàng)建目標(biāo)文件,所用的函數(shù)也是上面那幾個(gè)。
第三步:讀取文件。庫(kù)函數(shù)有:size_t read(int fd,void *buf,size_t count),
size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream)
第三步:寫入目標(biāo)文件。用的庫(kù)函數(shù):size_t write(int fd,void *buf,size_t count),
size_t fwrite(void *ptr,size_t size,size_t nmemb,FILE *stream)
第四步:關(guān)閉文件。庫(kù)函數(shù):int fclose(FILE *fp) ,int close(int fd)
思路步驟就是這樣子的了。下面是具體的代碼實(shí)現(xiàn)。
#include
#include
#include
#include
#include
#include
int main(int argc,char *argv[])
{
int fd_source_file,fd_copy_file;//用接受int open()函數(shù)返回的值
//FILE *fp_source_file,*fp_copy_file;//如果用FILE *fopen()函數(shù)的話
int size_read,size_write;
char buf[1024];
char copy_file_name[50];
//檢查參數(shù)的輸入
if(argc3)
{
printf("usage: ./a.out source_file_path copy_file_path\n");
exit(1);
}
//復(fù)制目標(biāo)文件名
strcpy(copy_file_name,argv[2]);
//打開(kāi)源文件
if( (fd_source_file=open(argv[1],O_RDONLY,00744))0 )
{
perror("open source file error");
exit(1);
}
//創(chuàng)建目標(biāo)文件
if( (fd_copy_file=open(argv[1],O_CREAT|O_RDWR)) 0 )
{
perror("create copy file error");
exit(1);
}
do
{
//讀取文件內(nèi)容
if( (size_read=read(fd_source_file,buf,1024)) 0 )
{
perror("read source file error");
exit(1);
}
//寫入目標(biāo)文件
if( (size_write=write(fd_copy_file,buf,sieze_read))0 )
{
perror("wrire file error");
exit(1);
}
}while(size_read==1024)
return 0;
}