上述代码如何修改为把原目标的本身复制过来
时间: 2024-03-11 20:50:24 浏览: 151
测试代码RVO优化反汇编代码
如果您想要修改上述代码,使其可以将目标文件夹本身也复制到指定目录中,可以针对CreateDirectory函数的返回值进行判断,在创建目标文件夹之前先判断目标文件夹是否已经存在,如果目标文件夹已经存在,则需要先将目标文件夹本身复制到指定目录中,然后再递归复制源文件夹中的文件和文件夹到指定目录中。
具体的修改代码如下:
```cpp
bool Uakietool_movieBPLibrary::akietool_movieSampleFunction(FString source, FString target) {
LPCWSTR lpFolderSrc = TCHAR_TO_WCHAR(*source);
LPCWSTR lpFolderDest = TCHAR_TO_WCHAR(*target);
TCHAR szSrc[MAX_PATH], szDest[MAX_PATH];
WIN32_FIND_DATA FindFileData;
// 判断目标文件夹是否已存在
if (GetFileAttributes(lpFolderDest) != INVALID_FILE_ATTRIBUTES) {
// 复制目标文件夹到指定目录中
wsprintf(szSrc, TEXT("%s\\"), lpFolderDest);
wsprintf(szDest, TEXT("%s\\%s"), lpFolderSrc, szSrc);
if (!CopyDirectory(szSrc, szDest)) {
return false;
}
} else {
// 创建目标文件夹
if (!CreateDirectory(lpFolderDest, NULL)) {
return false;
}
}
// 复制源文件夹中的文件和文件夹到目标文件夹中
wsprintf(szSrc, TEXT("%s\\*"), lpFolderSrc);
HANDLE hFind = FindFirstFile(szSrc, &FindFileData);
if (hFind == INVALID_HANDLE_VALUE) {
return false;
}
do {
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
if (_tcscmp(FindFileData.cFileName, TEXT(".")) != 0 &&
_tcscmp(FindFileData.cFileName, TEXT("..")) != 0) {
wsprintf(szSrc, TEXT("%s\\%s"), lpFolderSrc, FindFileData.cFileName);
wsprintf(szDest, TEXT("%s\\%s"), lpFolderDest, FindFileData.cFileName);
akietool_movieSampleFunction(szSrc, szDest);
}
} else {
wsprintf(szSrc, TEXT("%s\\%s"), lpFolderSrc, FindFileData.cFileName);
wsprintf(szDest, TEXT("%s\\%s"), lpFolderDest, FindFileData.cFileName);
CopyFile(szSrc, szDest, FALSE);
}
} while (FindNextFile(hFind, &FindFileData));
FindClose(hFind);
return true;
}
bool Uakietool_movieBPLibrary::CopyDirectory(LPCWSTR lpExistingDir, LPCWSTR lpNewDir) {
if (!CreateDirectory(lpNewDir, NULL)) {
return false;
}
TCHAR szSrc[MAX_PATH], szDest[MAX_PATH];
WIN32_FIND_DATA FindFileData;
wsprintf(szSrc, TEXT("%s\\*"), lpExistingDir);
HANDLE hFind = FindFirstFile(szSrc, &FindFileData);
if (hFind == INVALID_HANDLE_VALUE) {
return false;
}
do {
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
if (_tcscmp(FindFileData.cFileName, TEXT(".")) != 0 &&
_tcscmp(FindFileData.cFileName, TEXT("..")) != 0) {
wsprintf(szSrc, TEXT("%s\\%s"), lpExistingDir, FindFileData.cFileName);
wsprintf(szDest, TEXT("%s\\%s"), lpNewDir, FindFileData.cFileName);
CopyDirectory(szSrc, szDest);
}
} else {
wsprintf(szSrc, TEXT("%s\\%s"), lpExistingDir, FindFileData.cFileName);
wsprintf(szDest, TEXT("%s\\%s"), lpNewDir, FindFileData.cFileName);
CopyFile(szSrc, szDest, FALSE);
}
} while (FindNextFile(hFind, &FindFileData));
FindClose(hFind);
return true;
}
```
这里增加了一个名为CopyDirectory的函数,用于将一个文件夹复制到指定目录中。同时,修改了原先的akietool\_movieSampleFunction函数,在复制文件夹之前进行目标文件夹是否存在的判断。如果目标文件夹已经存在,则先将目标文件夹本身复制到指定目录中,然后再递归复制源文件夹中的文件和文件夹到指定目录中。
阅读全文