1、使用 fgetc() 逐字符复制
使用 fgetc()
从源文件逐个读取字符,并使用 fputc() 将其写入目标文件。
#include <stdio.h>
int main() {
FILE *sourceFile, *destFile;
char ch;
sourceFile = fopen("source.txt", "r");
destFile = fopen("destination.txt", "w");
if (sourceFile == NULL || destFile == NULL) {
perror("Error opening file");
return 1;
}
while ((ch = fgetc(sourceFile)) != EOF) {
fputc(ch, destFile);
}
fclose(sourceFile);
fclose(destFile);
printf("File copied successfully using fgetc().\n");
return 0;
}
2、使用 fgets() 逐行复制
使用 fgets()
从源文件逐行读取内容,并使用 fputs() 将其写入目标文件。
#include <stdio.h>
int main() {
FILE *sourceFile, *destFile;
char buffer[256];
sourceFile = fopen("source.txt", "r");
destFile = fopen("destination.txt", "w");
if (sourceFile == NULL || destFile == NULL) {
perror("Error opening file");
return 1;
}
while (fgets(buffer, sizeof(buffer), sourceFile) != NULL) {
fputs(buffer, destFile);
}
fclose(sourceFile);
fclose(destFile);
printf("File copied successfully using fgets().\n");
return 0;
}
3、使用 fread() 和 fwrite() 块复制
使用 fread()
从源文件中读取一定量的数据块,并使用 fwrite() 将其写入目标文件。这种方法适合大文件的复制。
#include <stdio.h>
int main() {
FILE *sourceFile, *destFile;
char buffer[1024];
size_t bytesRead;
sourceFile = fopen("source.txt", "r");
destFile = fopen("destination.txt", "w");
if (sourceFile == NULL || destFile == NULL) {
perror("Error opening file");
return 1;
}
while ((bytesRead = fread(buffer, 1, sizeof(buffer), sourceFile)) > 0) {
fwrite(buffer, 1, bytesRead, destFile);
}
fclose(sourceFile);
fclose(destFile);
printf("File copied successfully using fread() and fwrite().\n");
return 0;
}
4、使用 fscanf() 和 fprintf() 复制格式化内容
使用 fscanf()
读取源文件中的格式化内容,并使用 fprintf()
将其写入目标文件。适用于处理结构化文本。
#include <stdio.h>
int main() {
FILE *sourceFile, *destFile;
char buffer[256];
sourceFile = fopen("source.txt", "r");
destFile = fopen("destination.txt", "w");
if (sourceFile == NULL || destFile == NULL) {
perror("Error opening file");
return 1;
}
while (fscanf(sourceFile, "%s", buffer) != EOF) {
fprintf(destFile, "%s ", buffer);
}
fclose(sourceFile);
fclose(destFile);
printf("File copied successfully using fscanf() and fprintf().\n");
return 0;
}
5、使用低级别 I/O 函数 read() 和 write() 复制
使用 read()
从源文件读取字节数据,并使用 write()
将其写入目标文件。适用于需要更直接控制文件 I/O 的情况。
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
int sourceFile, destFile;
char buffer[1024];
ssize_t bytesRead;
sourceFile = open("source.txt", O_RDONLY);
destFile = open("destination.txt", O_WRONLY | O_CREAT, 0644);
if (sourceFile == -1 || destFile == -1) {
perror("Error opening file");
return 1;
}
while ((bytesRead = read(sourceFile, buffer, sizeof(buffer))) > 0) {
write(destFile, buffer, bytesRead);
}
close(sourceFile);
close(destFile);
printf("File copied successfully using read() and write().\n");
return 0;
}