posted at 2016-04-16 11:03:27 +0000
利用C语言实现复制任意文件的方法主要有3种:
我们这里主要说明第一种。
首先我们可以确定对于一个正常的文件,它的比特大小一定是8的整数倍。所以我们用C语言里面的unsigned char类型来作为读写缓存。
接下来,我们需要做的就是以二进制方式分别打开2个文件(待复制和目标文件)再利用 fread() 与 fwrite()进行循环读写来实现文件复制。
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
ptr是读出数据的存放地址
size是要读出单字节数
nmemb是要读出多少个size大小的数据
stream为文件指针
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
ptr是要写入的数据
size是要写入内容的单字节数
nmemb是要写入多少个size大小的数据
stream为文件指针
*除此之外,我们还要考虑文件操作异常的问题。包括,文件打开出错,文件读写出错。
完整源代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char_ * argv) {
FILE_ fp, * tp;
char dirfrom[33] = {
'\0'
}, dirto[33] = {
'\0'
};
unsigned char c = 0;
int flen = 0;
//get directory
if (argc != 3) {
printf(" usage: P764 sourceFilename destinationFilename\n");
return 1;
}
strcpy(dirfrom, argv[1]);
strcpy(dirto, argv[2]);
//io FAILED
fp = fopen(dirfrom, "rb");
if (!fp) {
printf(" source File (%s) Open Error!\n", dirfrom);
return 2;
}
tp = fopen(dirto, "wb");
if (!tp) {
printf(" destination File (%s) Create Error!\n", dirto);
fclose(fp);
return 3;
}
//START COPY
while (!feof(fp)) {
fread( & c, sizeof(c), 1, fp);
if (ferror(fp)) {
printf(" writing destination File (%s) Error!\n", dirto);
fclose(fp);
fclose(tp);
return 4;
}
if (!feof(fp)) {
fwrite( & c, sizeof(c), 1, tp);
if (ferror(tp)) {
printf(" writing destination File (%s) Error!\n", dirto);
fclose(fp);
fclose(tp);
return 4;
}
c = 0;
}
}
fclose(fp);
fclose(tp);
printf(" copy %s to %s successed!\n", dirfrom, dirto);
return 0;
}
© kanch
→ zl AT kanchz DOT com
last updated on 2022-07-27 01:57:54 +0000