1、使用标准库函数 fgetc 和 fputc
使用标准库函数逐个字符地读写文件。
#include <stdio.h>
void copyFile(const char *src, const char *dest) {
FILE *sourceFile = fopen(src, "r");
FILE *destFile = fopen(dest, "w");
if (sourceFile == NULL || destFile == NULL) {
printf("Error opening files.\n");
return;
}
int ch;
while ((ch = fgetc(sourceFile)) != EOF) {
fputc(ch, destFile);
}
fclose(sourceFile);
fclose(destFile);
}
int main() {
FILE *fd = fopen("source.txt","w+");
if(fd != NULL){
printf("%s 源文件创建\n","source.txt");
}
copyFile("source.txt", "destination.txt");
FILE *fd1 = fopen("destination.txt","r");
if(fd1 != NULL){
printf("%s 是复制文件\n","destination.txt");
}
return 0;
}
2、使用 fread 和 fwrite
使用标准库函数一次读写多个字符。
#include <stdio.h>
void copyFile(const char *src, const char *dest) {
FILE *sourceFile = fopen(src, "rb");
FILE *destFile = fopen(dest, "wb");
if (sourceFile == NULL || destFile == NULL) {
printf("Error opening files.\n");
return;
}
char buffer[1024];
size_t bytesRead;
while ((bytesRead = fread(buffer, 1, sizeof(buffer), sourceFile)) > 0) {
fwrite(buffer, 1, bytesRead, destFile);
}
fclose(sourceFile);
fclose(destFile);
}
int main() {
FILE *fd = fopen("source.txt","w+");
if(fd != NULL){
printf("%s 源文件创建\n","source.txt");
}
copyFile("source.txt", "destination.txt");
FILE *fd1 = fopen("destination.txt","r");
if(fd1 != NULL){
printf("%s 是复制文件\n","destination.txt");
}
return 0;
}
3、使用低级文件I/O函数 read 和 write
这种方法使用POSIX标准的低级文件I/O函数进行文件复制。
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
void copyFile(const char *src, const char *dest) {
int sourceFile = open(src, O_RDONLY);
int destFile = open(dest, O_WRONLY | O_CREAT | O_TRUNC, 0644);
if (sourceFile == -1 || destFile == -1) {
printf("Error opening files.\n");
return;
}
char buffer[1024];
ssize_t bytesRead;
while ((bytesRead = read(sourceFile, buffer, sizeof(buffer))) > 0) {
write(destFile, buffer, bytesRead);
}
close(sourceFile);
close(destFile);
}
int main() {
FILE *fd = fopen("source.txt","w+");
if(fd != NULL){
printf("%s 源文件创建\n","source.txt");
}
copyFile("source.txt", "destination.txt");
FILE *fd1 = fopen("destination.txt","r");
if(fd1 != NULL){
printf("%s 是复制文件\n","destination.txt");
}
return 0;
}
4、使用标准库函数 fgets 和 fputs
这种方法逐行读取和写入文件,适用于文本文件。
#include <stdio.h>
void copyFile(const char *src, const char *dest) {
FILE *sourceFile = fopen(src, "r");
FILE *destFile = fopen(dest, "w");
if (sourceFile == NULL || destFile == NULL) {
printf("Error opening files.\n");
return;
}
char buffer[1024];
while (fgets(buffer, sizeof(buffer), sourceFile) != NULL) {
fputs(buffer, destFile);
}
fclose(sourceFile);
fclose(destFile);
}
int main() {
FILE *fd = fopen("source.txt","w+");
if(fd != NULL){
printf("%s 源文件创建\n","source.txt");
}
copyFile("source.txt", "destination.txt");
FILE *fd1 = fopen("destination.txt","r");
if(fd1 != NULL){
printf("%s 是复制文件\n","destination.txt");
}
return 0;
}