Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.004 c
14-39850
VictorT
2002-04-04 11:04
2002.05.13
Задачка


1-39732
Андрей Сенченко
2002-04-27 15:18
2002.05.13
Регистрация горячей клавиши


1-39751
Чайна
2002-04-26 23:53
2002.05.13
Сохранение рекорда с динамическим массивом в файле


3-39682
Chainik
2002-04-17 11:02
2002.05.13
компоненты ODAC/DAO для Oracle


1-39772
Anton+
2002-04-28 21:03
2002.05.13
Сбросить таймер.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский