Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2011, 12:37   #1
hacknet
Форумчанин
 
Регистрация: 11.11.2008
Сообщений: 177
По умолчанию копирование программы

привет всем! делаю копирование своей программы вот таким образом
Код:
CopyFile(PChar(ParamStr(0)), PChar(memo1.Lines.Text +
 ExtractFileName(ParamStr(0))), True);
подскажите как узнать, что программа с копировалась и находится там, если нет то скопировать еще раз, если есть вывести сообщение)
заранее спасибо!
hacknet вне форума Ответить с цитированием
Старый 04.12.2011, 12:43   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

может вас это удивит, но CopyFile возвращает результат
Код:
Return value

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.
в данном случае читаем как, если успешно вернет true, иначе false.

намек понят?)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.12.2011, 13:03   #3
hacknet
Форумчанин
 
Регистрация: 11.11.2008
Сообщений: 177
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
может вас это удивит, но CopyFile возвращает результат
Код:
Return value

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.
в данном случае читаем как, если успешно вернет true, иначе false.

намек понят?)
понят)) спасибо, может кому то пригодиться)
Код:
if CopyFile(PChar(ParamStr(0)), PChar(memo1.Lines.Text +
 ExtractFileName(ParamStr(0))), True) = true then
 showmessage('копируем')
 else
 showmessage('уже есть');
Зачем вы отвечаете с цитированием всего предыдущего поста ?
Чтоб "простыня" подлиннее получилась ?
Чтоб ваш "драгоценнейший" пост занимал весь экран ?
Вы не видите кнопку справа от кнопки "Цитата" ?
Или вам почему-то не видно пустое окно редактора под последним сообщением, куда можно просто ввести ответ ?
За оверквотинг у нас штрафуют, имейте это ввиду.
Дабы не нарушать правила раздела, внимательно их почитайте...
А пока - штраф за флуд...

Последний раз редактировалось mihali4; 05.12.2011 в 01:45.
hacknet вне форума Ответить с цитированием
Старый 04.12.2011, 13:09   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Зачем сравнивать с True? Просто: if CopyFile(...) then ... else ... ;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.12.2011, 15:57   #5
QunneD
C++ & PHP & Asm
Форумчанин
 
Аватар для QunneD
 
Регистрация: 06.12.2008
Сообщений: 300
По умолчанию

Цитата:
Зачем сравнивать с True? Просто: if CopyFile(...) then ... else ... ;
Так просто будет правильнее, и внешне всё это дело воспринимается лучше.

Код:
if CopyFile(PChar(ParamStr(0)), PChar(memo1.Lines.Text +
 ExtractFileName(ParamStr(0))), True) = true then
 showmessage('копируем')
 else
 showmessage('уже есть');
Лучше так:

Код:
if (CopyFileA(PChar(paramstr(0)), PChar(Memo1.Lines.Text + ExtractFileName(paramstr(0))), true) = true) then
begin
   MessageBoxA(0, 'Операция завершена', '', $00000040);
end
else
begin
   MessageBoxA(0, PChar('Провал'+#13#10+'Код ошибки: '+IntToStr(GetLastError)), '', $00000010);
end;
Зачем вы отвечаете с цитированием всего предыдущего поста ?
Чтоб "простыня" подлиннее получилась ?
Чтоб ваш "драгоценнейший" пост занимал весь экран ?
Вы не видите кнопку справа от кнопки "Цитата" ?
Или вам почему-то не видно пустое окно редактора под последним сообщением, куда можно просто ввести ответ ?
За оверквотинг у нас штрафуют, имейте это ввиду.
Дабы не нарушать правила раздела, внимательно их почитайте...
А пока - штраф за флуд...

Последний раз редактировалось mihali4; 05.12.2011 в 01:47.
QunneD вне форума Ответить с цитированием
Старый 04.12.2011, 16:08   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Так просто будет правильнее
из bool делать bool никапли не правильнее.
у нас итак bool, потому и нет смысла.
а в if выражение писать в скобках, вообще Сишный стиль
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 04.12.2011 в 16:11.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.12.2011, 16:53   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

QunneD, компилятору пофиг лишние скобки, сравнение Bool с Bool и лишние блоки begin end. Это все только затрудняет чтение программы. Можно и так писать (в случае если заработок идет от количества нарисованных строк кода):
Код:
if (1=1) then
begin
  a:=b;
end;

вместо

a:=b;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.12.2011, 16:59   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
лишние блоки begin end
а мне наоборот так более нравится.
(ну если не пустой блок без смысла)
я имею в виду в while, if, всегда стараюсь блоки писать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.01.2012, 13:20   #9
hacknet
Форумчанин
 
Регистрация: 11.11.2008
Сообщений: 177
По умолчанию

хм, а как сделать, чтоб после копирования, программа запустилась с места, куда скопировалась и при этом закрыла основную программу) надеюсь понятен))
hacknet вне форума Ответить с цитированием
Старый 29.01.2012, 13:30   #10
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,871
По умолчанию

я делал такую программу - прыгалка по дискам. копирует себя в новое место, запускается, а старую удаляет. причём делает это постоянно, так что почти невозможно её поймать. поищите мою тему, где обсуждение программ или безопасность.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# Копирование участка программы в буфер как изображение Forcer Помощь студентам 5 04.07.2011 10:55
Копирование программы написанной на delphi6 с одного компьютера на другой.Не пашет. zergon Общие вопросы Delphi 7 09.12.2009 09:45
Копирование программы SL1CK Паскаль, Turbo Pascal, PascalABC.NET 18 28.08.2009 09:31
Копирование программы. Rahim1993 Общие вопросы Delphi 4 14.02.2008 11:44