猫史档案馆


c++如何遍历电脑所有的文件,然后保存?

用户:AK亨利佐加DanJamesThomasAK亨利佐加DanJamesThomas查看:0 回复:1 评论:0 创建时间:2023-03-02T18:50:26


如题如题如题如题如题如题如题如题


回复

上一页1 页 / 共 1下一页
萨卡班甲鱼鱼的屑萨卡班甲鱼鱼的屑

在C++中,可以通过递归遍历电脑所有文件的方法来实现该功能。以下是一个简单的示例代码:

#include <iostream>
#include <fstream>
#include <dirent.h>
#include <windows.h>

using namespace std;

void listFiles(const char *dir_path) {
    DIR *dir;
    struct dirent *entry;
    if((dir = opendir(dir_path)) != NULL) {
        while((entry = readdir(dir)) != NULL) {
            if(strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) {
                string file_path = dir_path;
                file_path += "/" + entry->d_name;
                if(entry->d_type == DT_DIR) {
                    listFiles(file_path.c_str());
                } else {
                    // 保存文件
                    ofstream outfile(entry->d_name, ios::binary);
                    ifstream infile(file_path.c_str(), ios::binary);
                    outfile << infile.rdbuf();
                    cout << "Saved file: " << entry->d_name << endl;
                    infile.close();
                    outfile.close();
                }
            }
        }
        closedir(dir);
    }
}

int main() {
    // 获取磁盘列表
    TCHAR szDrive[26];
    DWORD dwDriveList = GetLogicalDriveStringsW(26, szDrive);
    TCHAR* pDrive = szDrive;
    while(*pDrive && dwDriveList) {
        // 判断磁盘类型是否是本地硬盘
        UINT type = GetDriveTypeW(pDrive);
        if(type == DRIVE_FIXED) {
            cout << "Scanning drive " << pDrive << "..." << endl;
            listFiles(pDrive);
        }
        pDrive += wcslen(pDrive) + 1;
        dwDriveList -= wcslen(pDrive) + 1;
    }
    return 0;
}

该代码通过调用GetLogicalDriveStringsW函数获取电脑所有磁盘列表,然后依次遍历每个磁盘,并通过递归调用listFiles函数遍历该磁盘下的所有文件。对于每个文件,可以通过fstream库来读取文件内容并保存到本地文件中。注意,由于该方法需要遍历整个电脑的所有文件,因此运行时间可能很长。另外,该方法可能会遍历一些系统文件或无法访问的文件,或者会由于权限问题而导致读写错误,因此需要小心使用。

点赞0


评论