如何使用 CopyFile 函数复制多个文件?

How to copy multiple files with CopyFile function?

这是我的代码示例,用于将文件从 src 复制到 dst:

int main() {

    const wchar_t* file[3] = { L"\abc.txt", L"\def.txt", L"\ghi.txt" };

    for (int i = 0; i < 3; i++) {
        wchar_t* src = funcA();
        wchar_t* dst = funcB();
        wcscat(dst, file[i]);
        wcscat(src, file[i]);
        CopyFileW(src, dst, TRUE);
    }
}

有更好的方法吗?我可以通过多次不运行 funcA 和funcB 来优化代码吗?

修复错误后,您的代码会将文件复制到自身。归结为:

const wchar_t* file[3] = { L"\abc.txt", L"\def.txt", L"\ghi.txt" };
for(int i = 0; i < _countof(file); i++)
    CopyFile(file[i], file[i], TRUE);

只是将"\abc.txt"复制到"\abc.txt",将"\def.txt"复制到"\def.txt",等等

大概您的意图是将多个文件从一个目录复制到另一个目录。例如复制"abc.txt""c:\target\abc.txt"

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main(void)
{
    const wchar_t* files[3] = { L"1.txt", L"2.txt", L"3.txt" };

    wchar_t *directory = L"c:\target";
    wchar_t dst[MAX_PATH] = { 0 };
    for(int i = 0; i < _countof(files); i++)
    {
        swprintf(dst, _countof(dst), L"%ls\%ls", directory, files[i]);
        CopyFileW(files[i], dst, TRUE);
    }

    return 0;
}

请注意,我将源更改为 "abc.txt" 并更改了 swprintf

中的格式说明符

在实际应用中你可能希望将"c:\src\1.txt"复制到"c:\dst\1.txt",像这样的代码:

#define UNICODE
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <Shlwapi.h>

#pragma comment(lib, "Shlwapi.lib")//Add library (Visual Studio specific)

int main(void)
{
    const wchar_t* files[3] =
        { L"c:\src\1.txt", L"c:\src\2.txt", L"c:\src\3.txt" };

    wchar_t *directory = L"c:\dst";
    wchar_t dst[MAX_PATH] = { 0 };

    if(!PathFileExists(directory))
    {
        wprintf(L"path error\n");
        return 0;
    }

    for(int i = 0; i < _countof(files); i++)
    {
        swprintf(dst, _countof(dst), L"%ls\%ls", directory, PathFindFileName(files[i]));
        //CopyFile(files[i], dst, TRUE);
        wprintf(L"copy %s to %s\n", files[i], dst);
    }

    return 0;
}