Форум: "Основная";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];
ВнизКопирование файлов с помощью SHFileOperation Найти похожие ветки
← →
Vovchik (2002-04-27 19:51) [0]Это не вопрос, а ответ. Всем интересущимся копированием файлов. Вот только что выложил обещанный пример программы: http://delphi.mastak.ru/cgi-bin/download.pl?get=1019922539&n=1.
И никаких проблем при написании не возникло.
← →
Anatoly Podgoretsky (2002-04-27 20:07) [1]Если кто сомневается, то подтверждаю, пример в части работы с самой функциией SHFileOperation написан правильно, не в пример другим примерам.
2 Vovchik
Может стоило его выложить в FAQ в упрощенном виде, только саму часть работа с SHFileOperation и упростить немного?
← →
Vovchik (2002-04-27 20:11) [2]> Anatoly Podgoretsky © (27.04.02 20:07)
Спасибо за оценку моей скромной поделки.
А что упрощать-то? Проще некуда. Мне так кажется. И так выброшены всякие навороты, типа задания имени для каждого копируемого файла (копирование+переименование) и вывод прогресс-бара.
← →
Anatoly Podgoretsky (2002-04-27 20:19) [3]Вообще то это pTo:=PChar(DDirname.Text); надо записать так pTo:=PChar(DDirname.Text+#0);
Сразу не обратил внимания "The list of names must be double null-terminated." для pFrom это сделано.
← →
Vovchik (2002-04-27 20:31) [4]Да, формально согласен. Но есть маленькое замечание. Возможно, это имеет значение только для Multiple names (т.е. указан флаг FOF_MULTIDESTFILES), а если имя только одно, то, возможно, разницы нету. Если бы ф-ция реально пыталась обратиться к символу, следующему за последним символом, то наверное было бы Access violation.
Но, формально, да, надо два нуля. Мой недосмотр.
← →
Anatoly Podgoretsky (2002-04-27 20:51) [5]Vovchik © (27.04.02 20:31)
К сожалению нет, я сам не первых порах попадался на этом и ошибка подлая не каждый раз вылазит. К тому же фунция не может знать чколько файлов передано в списке, двойной ноль как раз об этом и сигнализирует.
Если ты помнишь начало истории, когда я предложил написать пример, так вот две основные ошибки при работе в SHFileOperation это
1. неполная инициализация структуры;
2. этот самый преслоутый ноль.
Если будет ошибка, то как правило не AV, а 1026, в хелпе поставляемым с Дельфи этого кода нет, что и затрудняло обнаружение причины.
← →
Vovchik (2002-04-27 21:01) [6]Возможно, я не настаиваю. Просто я потестил эту прогу и копировала она нормально. А насчёт того, что ф-ция не знает, это не совсем так. Если не указан флаг FOF_MULTIDESTFILES, то можно считать, что каталог назначения один.
← →
Anatoly Podgoretsky (2002-04-27 21:07) [7]Каталог то один, а файлов может быть много или даже не много а один файл, а не каталог. Ошибка не сразу обнаруживается, по себе знаю :=)
← →
Vovchik (2002-04-27 21:12) [8]Стоп. В качестве назначения указывается каталог или файл в единственном числе. Если надо много, то ставится этот самый флаг.
Я хочу сказать, что у ф-ции есть информация, ей не обязательно искать концовку строки в виде двух нулей, если не указан соответствующий флаг.
Но, формально, лучше два нуля.
← →
Anatoly Podgoretsky (2002-04-27 21:25) [9]Не совсем так, флаг ставится если для каждого файла указывается свой путь. Во вторых параметр не обязан быть каталогом, а может быть именем файла.
В FAQ сайта этой ошибки нет, правда пока кто нибудь не вздумает переделать пример под свои нужды.
Насчет обязательно искать два нуля или один, сказано одназначно, обязано быть два нуля, я еще раз подчеркиваю сам попался на подобной ошибке, проявляется только при использовании более одного раза с одним и тем же буфером. По моему чего спорить сказано два, значит надо использовать два, а не делать предположение сколько нулей будет искать функция.
← →
Vovchik (2002-04-27 21:37) [10]Да я не спорю, просто получается избыточность.
>флаг ставится если для каждого файла указывается свой путь
Да, но если флага нет - то значит путь один, и значит не надо искать два нуля. Как ни крути, а избыточность всё же есть.
← →
Anatoly Podgoretsky (2002-04-27 21:47) [11]Да бог с ней избыточность, давай закончим на этом дисскуссию, я обратил на жто внимание, а уж другое дело следовать это или нет.
← →
Vovchik (2002-04-27 21:55) [12]ОК!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c