[C++] 纯文本查看 复制代码
#include <iostream>
#include <fstream>
#include <cstring>
#include <windows.h>
using namespace std;
// 定义函数 check_file,用于检查文件是否存在且已修改
bool check_file(const char *path, const char *last_modified_time) {
WIN32_FIND_DATAA data;
HANDLE hFind;
char search_path[MAX_PATH] = "";
strcpy(search_path, path);
strcat(search_path, "\\*.*");
hFind = FindFirstFileA(search_path, &data);
if (hFind != INVALID_HANDLE_VALUE) {
do {
// 排除"."和".."两个特殊目录
if (strcmp(data.cFileName, ".") == 0 || strcmp(data.cFileName, "..") == 0)
continue;
// 获取文件修改时间
FILETIME ftWrite;
SYSTEMTIME stUTC, stLocal;
ftWrite = data.ftLastWriteTime;
FileTimeToSystemTime(&ftWrite, &stUTC);
SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);
char file_modified_time[20];
sprintf(file_modified_time, "%04d-%02d-%02d %02d:%02d:%02d",
stLocal.wYear, stLocal.wMonth, stLocal.wDay,
stLocal.wHour, stLocal.wMinute, stLocal.wSecond);
// 比较文件修改时间和上次检查时间
if (strcmp(file_modified_time, last_modified_time) > 0)
return true;
} while (FindNextFileA(hFind, &data));
FindClose(hFind);
}
return false;
}
// 定义函数 copy_file,用于复制指定格式和大小的文件
void copy_file(const char *src_file, const char *dest_dir, const char *file_ext, int max_size) {
ifstream ifs(src_file, ios::binary | ios::ate);
int file_size = ifs.tellg(); // 获取文件大小
ifs.seekg(0, ios::beg);
if (file_size > max_size) {
cout << "File size exceeds the maximum specified value." << endl;
return;
}
if (strstr(src_file, file_ext) == NULL) {
cout << "File format does not match the specified value." << endl;
return;
}
char dest_path[MAX_PATH] = "";
strcpy(dest_path, dest_dir);
strcat(dest_path, "\\");
strcat(dest_path, strrchr(src_file, '\\') + 1);
ofstream ofs(dest_path, ios::binary);
ofs << ifs.rdbuf();
cout << "File copied successfully!" << endl;
}
int main() {
char u_disk[] = "E:";
char dest_dir[] = "D:\\test\\";
char file_ext[] = ".txt";
int max_size = 1024;
char last_modified_time[20] = "1970-01-01 00:00:00"; // 初始值为 1970-01-01 00:00:00,表示目录中所有文件都未被修改过
while (true) {
if (GetDriveTypeA(u_disk) == DRIVE_REMOVABLE) { // 如果 U 盘已插入
if (check_file(dest_dir, last_modified_time)) { // 如果目录中的文件被修改过
copy_file(u_disk, dest_dir, file_ext, max_size); // 复制指定格式和大小的文件
SYSTEMTIME st;
GetLocalTime(&st);
sprintf(last_modified_time, "%04d-%02d-%02d %02d:%02d:%02d",
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond); // 更新目录的最后修改时间
}
}
Sleep(5000); // 每隔 5 秒钟检查一次
}
return 0;
}