Я пытаюсь создать программу, которая создает резервную копию папки. Проблема в том, что когда я пытаюсь использовать функцию CopyFile, я получаю ошибку 2 (FILE_NOT_FOUND), но я могу открыть файл, используя fopen и точно такой же путь. Я также использую формат utf-8.
void Folder::copy_files(std::string destination) {
bool error = false;
std::string destinationpath = destination;
for (std::string i : Get_files_paths()) {
std::string destinationpath = destination;
destinationpath.append(split_file_folder_name(i));
#ifdef DEBUG
char str[100];
const char* floc_cstr = i.c_str();
LPCTSTR floc = (LPCTSTR)floc_cstr;
printf("\t[DEBUG]FILE_LOC_PATH: %s\n", floc_cstr);
std::cout << "\t[DEBUG]memory loc" << floc << std::endl;
#pragma warning(disable : 4996)
FILE* fp = fopen(floc_cstr, "r");
if (fp == NULL) {
printf("file not found");
exit(1);
}
else {
printf("file found \n");
fscanf(fp, "%s", str);
printf("%s", str);
}
fclose(fp);
print_last_error(GetLastError());
#endif
error = CopyFile(floc , (LPCTSTR)destinationpath.c_str(), false);
if (error == false) {
print_last_error(GetLastError());
}
}
}
Из этого кода я должен ожидать, что скопирую файл, но получаю FILE_NOT_FOUND. Кто-нибудь знает, почему это происходит? (если вам нужна какая-либо другая часть кода, дайте мне знать)
const char*
кLPCTSTR
заставляет меня подозревать, что вашLPCTSTR
на самом деле являетсяconst wchar_t*
. Попробуйте использовать это и посмотрите, что произойдет:CopyFileA(floc_cstr, destinationpath.c_str(), false);
- person Ted Lyngmo   schedule 03.07.2019std::wstring
вместо этого в своем проекте. Кроме того, взгляните наstd::filesystem::file_copy
с аргументамиstd::filesystem::path
, которые должны работать как есть сL"paths"
и простым"paths"
. - person Ted Lyngmo   schedule 03.07.2019std::setlocale(LC_ALL, "en_US.utf8"); std::locale::global(std::locale("en_US.utf8"));
- person Nikos Issaris   schedule 03.07.2019