Я пытаюсь скопировать папку с помощью функции SHFileOperationA
. Вот мой код.SHFileOperation копирование папок с использованием строк
int main() {
SHFILEOPSTRUCTA sf;
int result;
string source = "D:\\check\\folder4";
string dest = "D:\\Documents\\test\\folder4";
sf.pFrom = source.c_str();
sf.pTo = dest.c_str();
sf.wFunc = FO_COPY;
sf.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR | FOF_SILENT;
result = SHFileOperationA(&sf);
return 0;
}
Я не в состоянии понять, что, как сделать строку прилагаемую по \0
дважды. Я пробовал что-то вроде этого.
string source = "D:\\check\\folder4\\0\\0";
string dest = "D:\\Documents\\test\\folder4\\0\\0";
Но, он не работает. Я также пробовал несколько комбинаций, но ни один из них не работает. Можете ли вы предложить мне, как это решить?
я могу решить эту проблему путем непосредственного назначения путей, как это: -
sf.pFrom = "D:\\check\\folder4";
sf.pTo = "D:\\Documents\\test\\folder4";
и проблема становится решена, но мое намерение состоит в том, чтобы сделать использование строк. Пожалуйста, помогите мне с этим.
Кроме того, если возможно, кто-нибудь скажет мне, почему прямое назначение строковой константы i.e sf.pFrom = "D:\\check\\folder4";
работает и присваивается с помощью строки, такой как sf.pFrom = source.c_str();
не работает?
Заранее спасибо.
Hi @Martin. Спасибо за ответ. Он работает сейчас. Но вторая часть мне непонятна. Я явно не добавляю '\ 0', поэтому компилятор добавит только один символ' '\ 0''.Или вы хотите сказать в буфере, возможно, следующий символ после того, как компилятор создал один '' \ 0'', также, к счастью, оказался '' \ 0'', поэтому он сработал? – user1190882
Ну, да, возможно, вам просто повезло :) Примите ответ, если это вам поможет. –
Но я не удовлетворен на самом деле. Хотя это может быть случайным, появился еще один символ '\ 0', что еще может быть для меня возможностью получить правильный ответ с массивами символов. Да, ваш ответ помог мне, и я приму свой ответ, но, пожалуйста, перечислите другие возможности для меня. – user1190882