quguimin Ответов: 1

Как я могу скопировать непустой каталог с помощью c++ на windows-PC?


Всем привет! Для этого у меня есть серьезная проблема, несколько месяцев назад я написал файл копирования непустого каталога в другой,включая все его дочерние файлы.но эта функция рекурсивна.у кого-нибудь есть лучший способ решить эту функцию? если только не использовать рекурсивный метод!Большое спасибо! Я буду очень признателен,ребята!

Patrice T

Поскольку дерево каталогов рекурсивно по своей природе, будет трудно сделать иначе.

quguimin

Спасибо! У меня есть вопрос,как вы думаете, внутренняя реализация функции 'SHFileOperation', может быть, она использует рекурсивный способ, не так ли?

Richard MacCutchan

Да, он использует рекурсию, которую вы можете отключить с помощью FOF_NORECURSION флаг.

Patrice T

Я не знаю этой функции, я не специалист по win32.

1 Ответов

Рейтинг:
2

Michael Haephrati

Может быть, этот код будет работать для вас:

bool CopyNonEmptyFolder(const std::wstring& source_folder, const std::wstring& target_folder)
{
	std::wstring new_sf = source_folder + L"\\*";
	WCHAR sf[MAX_PATH + 1];
	WCHAR tf[MAX_PATH + 1];

	wcscpy_s(sf, MAX_PATH, new_sf.c_str());
	wcscpy_s(tf, MAX_PATH, target_folder.c_str());

	sf[lstrlenW(sf) + 1] = 0;
	tf[lstrlenW(tf) + 1] = 0;

	SHFILEOPSTRUCTW s = { 0 };
	s.wFunc = FO_COPY;
	s.pTo = tf;
	s.pFrom = sf;
	s.fFlags = FOF_SILENT | FOF_NOCONFIRMMKDIR | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NO_UI;
	int res = SHFileOperationW(&s);

	return res == 0;
}


Dave Kreskowiak

Я сомневаюсь, что он все еще ищет четыре года спустя.

Michael Haephrati

Я на него не работаю. Я отвечаю на вопросы, оставшиеся без ответа, на благо всего общества.