![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Пользователь
Регистрация: 07.10.2011
Сообщений: 66
|
![]()
Я вас прекрасно понимаю, что вы пытаетесь меня самого подтолкнуть к ошибке, чтобы я её понял и додумался как исправить сам. Но пока, я не могу найти
![]() |
![]() |
![]() |
![]() |
#12 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Если функция DeleteFile говорит, что ты передал в неё что-то не то, то наверное надо проверить, что ты в неё передал?
Например так: Код:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#13 |
Пользователь
Регистрация: 07.10.2011
Сообщений: 66
|
![]()
Функция передала такое (судя по окну, в котором написано, что мы удаляем):
'Удаляю файл "C:\Documents"'' и все ![]() |
![]() |
![]() |
![]() |
#14 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Верно, а теперь наводящий вопрос: как бы ты передал своей программе два параметра?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#15 |
Пользователь
Регистрация: 07.10.2011
Сообщений: 66
|
![]() |
![]() |
![]() |
![]() |
#16 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Вообще-то трактовка командной строки остаётся на усмотрение программы, но в 99.99% случаев используют стандартное соглашение. Заключается оно в следующем.
Параметры указываются через пробел. Например: program.exe первый-параметр второй-параметр Несложно увидеть, что если у тебя в имени файла есть пробел, то эта ситуация не отличается от передачи нескольких параметров вместо одного. Например: program.exe C:\Documents and settings\UserName\Documents\program .exe Эквивалентно: ParamStr(1) = C:\Documents ParamStr(2) = and ParamStr(3) = settings\UserName\Documents\program .exe Чтобы указать, что пробел является частью параметра, используют кавычки. Например: program.exe "C:\Documents and settings\UserName\Documents\program .exe" ParamStr(1) = C:\Documents and settings\UserName\Documents\program .exe Если при этом внутри самого параметра уже есть кавычка, то она удваивается. Конкретно с именем файла этого не может быть (кавычка не может находится в имени файла), то в других ситуациях - вполне. Например: program.exe "Show me ""the money""" ParamStr(1) = Show me "the money" Это что касается проблемы 1. Проблема 2: Что произойдёт, если DeleteFile выполнится ДО Halt? P.S. Идиотские пробелы в "program .exe" вставил не я, а форум.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#17 |
Пользователь
Регистрация: 07.10.2011
Сообщений: 66
|
![]()
По поводу 1 проблемы:
Таааак, осознал ошибку) Проблема в этих ковычках ![]() По поводу 2 проблемы: ну по тестам на Windows 7 на протяжении 4 дней, сбоев не давало. |
![]() |
![]() |
![]() |
#18 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Его не надо присваивать. Его надо правильно передавать. Тебе нужно при указании параметров в ShellExecute завернуть имя файла в кавычки:
ShellExecute(... PChar(AnsiQuotedStr(ParamStr(0), '"')), ...); Надо как бы понимать, что если ты каждый день перебегаешь дорогу у дома на красный свет и тебя ещё пока не сбила машина - это ещё ни разу не означает, что это - правильно.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#19 | |
Пользователь
Регистрация: 07.10.2011
Сообщений: 66
|
![]() Цитата:
По поводу второго, то тут не вижу другого варианта. Использовать удаление через bat тоже как-то не хорошо. Может стоит попробывать сделать проверку, через if ... then ? Будет как-никак получше. А там уже, если не выполнилось условие, то сделать repeat. |
|
![]() |
![]() |
![]() |
#20 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 902
|
![]()
Вот классная простая функция найденная давно мною на просторах интернета, по самозавершению и удалению. Создает bat файл от туда завершает и удаляет файл затем bat, все просто. Сам ей пользуюсь иногда, перепробовал многое, но остановился на этой простой функции. Автору спасибо за простату и работу этой функции.
Были проблемы тоже в pach, нестал заморачиватся и применил стандартный метод заменил ParamStr(0) на Application.ExeName; Если без Application то тогда разберать путь как предложил GunSmoker Вот код функции: Код:
Последний раз редактировалось Aliens_wolfs; 14.02.2012 в 16:59. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
самоудаление | DeDoK | Общие вопросы Delphi | 10 | 31.01.2021 23:26 |
Самоудаление и автозапуск | CyberViper | Общие вопросы Delphi | 1 | 31.05.2010 11:55 |
Перед открытием файла программа должна спрашивать адрес файла | Belii09878 | Помощь студентам | 1 | 07.03.2010 16:37 |
Перезапись файла без путя или определение расположения файла программы | The Best | Общие вопросы Delphi | 4 | 13.07.2009 22:50 |