使用C语言进行文件读写
主要用到两个函数fread
和fwrite
代码
#include <stdio.h>
#include <errno.h>
#define BUF_SIZE 256
int main(int argc, char* argv[]) {
FILE* inFile; // 输入的文件
FILE* outFile; // 输出的文件
char rec[BUF_SIZE]; // 创建一个缓冲区,用于读写
size_t bytesIn; // 实际读取的字节数
size_t bytesOut; // 实际写入的字节数
if (argc != 3) {
printf("参数错误,没有输入源文件或者目标文件");
return 1;
}
// 打开要被复制的文件, rb二进制形式打开
errno_t err = fopen_s(&inFile, argv[1], "rb");
if (err != 0) {
perror(argv[1]);
return 2;
}
// 打开输出的文件,如果没有则会创建
err = fopen_s(&outFile, argv[2], "wb");
if (err != 0) {
perror(argv[2]);
return 3;
}
// 开始读取文件
while ((bytesIn = fread(rec, 1, BUF_SIZE, inFile)) > 0) {
// 将读到的内容输出到文件里
bytesOut = fwrite(rec, 1, bytesIn, outFile);
if (bytesIn != bytesOut) {
// 读取的和写入的数据量不相等,说明出错了
perror("Fatal write error");
return 4;
}
}
// 关闭文件指针
fclose(inFile);
fclose(outFile);
return 0;
}
使用Windows API进行读写
主要用到CreateFile
和WriteFile
代码
#include <Windows.h>
#include <stdio.h>
#define BUF_SIZE 256
int main(int argc, LPTSTR argv[]) {
HANDLE hIn, hOut; // 输入和输出的文件句柄
DWORD nIn, nOut; // 实际读取和输入的数据量
CHAR buffer[BUF_SIZE];
if (argc != 3) {
printf("参数错误,没有输入源文件或者目标文件");
return 1;
}
// 打开输入文件
hIn = CreateFile(
argv[1], // 要打开的文件
GENERIC_READ, // 读方式打开该文件
FILE_SHARE_READ, // 文件共享读
NULL, // 默认的安全属性
OPEN_EXISTING, // 打开已存在的文件
FILE_ATTRIBUTE_NORMAL, // 常规的文件属性
NULL
);
if (hIn == INVALID_HANDLE_VALUE) {
printf("can not open input file. Error: %x\n", GetLastError());
return 2;
}
// 打开输出文件
hOut = CreateFile(
argv[2], // 要写入的文件
GENERIC_WRITE, // 写方式打开该文件
0,
NULL,
CREATE_ALWAYS, // 总是创建新的文件
FILE_ATTRIBUTE_NORMAL, // 常规的文件属性
NULL
);
if (hOut == INVALID_HANDLE_VALUE) {
printf("can not open output file. Error: %x\n", GetLastError());
return 3;
}
// 开始读取文件
while (ReadFile(hIn, buffer, BUF_SIZE, &nIn, NULL) && nIn > 0) {
// 将读取的内容写入到文件中
WriteFile(hOut, buffer, nIn, &nOut, NULL);
if (nIn != nOut) {
// 如果读取的和写入的不相等
printf("Fatal write error: %x\n", GetLastError());
return 4;
}
}
// 关闭文件句柄
CloseHandle(hIn);
CloseHandle(hOut);
return 0;
}
直接拷贝文件
我们使用CopyFile
直接拷贝文件,最简便
代码
#include <Windows.h>
#include <stdio.h>
int main(int argc, LPTSTR argv[]) {
if (argc != 3) {
printf("参数错误,没有输入源文件或者目标文件");
return 1;
}
if (!CopyFile(argv[1], argv[2], FALSE)) {
printf("Copy file error: %x\n", GetLastError());
return 2;
}
return 0;
}