如何使用 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;
}
这是我的代码示例,用于将文件从 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;
}