Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > удалить папку


Автор: h2o 14.11.2005, 16:50
У меня встала такая проблема: Я из папки запускаю фаил, который потирает всё в этой папке, а потом и эту папку тоже. точнее он должен это делать! а не делает.

Поэтому я нашёл код, который при запуске этого файла, копирует его во временную папку и перезапускает! Всё вроде-бы круто, да вот только рабочим каталогом остаётся та папка из которой я изначально запускал файлик!!! и поэтому никаким способом не удалить эту папку пока не закроешь всё что вызвано программой!

Я где-то видел код который позволяет изменить рабочий каталог программы, тоесть я запускаю файл, копирую его куда-нибудь, и указываю ему рабочий каталог тот, куда я его скопировал и перезапускаю програмно, и получается что я могу сделать с первой папкой всё что захочу!!! Но вот никак ни где не могу этого кода найти!

Или есть другой способ удалить папку, из которой я запустил свой фаил?

Автор: Snowy 14.11.2005, 17:07
chdir

Автор: AKN 14.11.2005, 17:15
не страдай - запусти дубль во временной папке, пусти ей sendmessage с путем папки которую удалить нужно, и закрой программу в нужной папке. Прога во временной папке ждет сообщения, потом еще 100мсек чтобы та копия смогла закрыться и удаляешь каталог, указанный в сообщении. Или я неправильно понял?

Автор: h2o 15.11.2005, 09:17
AKN правильно, почти. но тот фаил что во временной папке, его рабочим каталогом считается та папка, которую хочу удалить, из которой изначально я запустил первый фаил!

тоесть получается есть папка ххх, в которой есть фаил ххх.ехе, я его запускаю оттуда, он копирует себя во временную папку и перезапускает оттуда! уже этим файлом во временной папке я могу удалить все файлы в папке ххх, но вот саму папку ххх - нет! даже если я из файла во временной папке создам батник, он тоже не сможет удалить папку ххх! а всё это потому что и у первого файла ххх.ехе в папке ххх и у файла ххх.ехе во временной папке и у батника, созданного в любой папке - ОДИН РАБОЧИЙ КАТАЛОГ - ххх!!!

так что вот в чём вся фишка! я незнаю, может есть способ скоировать фаил во временную папку, и сказать ему, вот твоя рабочая папка, та куда я тебя копирую, а не та из которой я тебя копирую!!! и перезапустить.

если что то вот код из drkb.chm от исходники.ру и винград.ру, который копирует фаил во временную папку и перезапускает его!
Код

//Копирование программы во временный каталог 

program Setup; 
uses 
  Windows, 
  SysUtils; 
const 
  ReRunParameter = '/install_from_temp_directory'; 
var 
  TempPath: array [0..MAX_PATH] of Char; 
  SrcPath: String; 
begin 
  if ParamStr(1) = ReRunParameter then 
    SrcPath := ParamStr(2) 
  else 
    if GetDriveType(PChar(ParamStr(0)[1] + ':\')) = DRIVE_REMOVABLE then 
    begin 
      // Если программа была запущена без ключа и с дискеты, то 
      // копируем её во временный каталог и перезапускам 
      // Текущее приложение завершаем. 
      GetTempPath(MAX_PATH, TempPath); 
      // Добавлям к пути временного каталога символ '\', если его там нет 
      if (StrLen(TempPath) > 0) and (TempPath[StrLen(TempPath)] <> '\') then 
        StrCat(TempPath, '\'); 
      // Копируем файл через вызов функции CopyFile из WinAPI 
      CopyFile(PChar(ParamStr(0)), PChar(String(TempPath) + ExtractFileName(ParamStr(0))), False); 
      // Запускаем файл с двумя параметрами 
      WinExec(PChar(String(TempPath) + ExtractFileName(ParamStr(0)) + ' ' + 
        ReRunParameter + ' ' + ExtractFilePath(ParamStr(0))), CmdShow); 
      Exit; 
    end 
    else 
      SrcPath := ExtractFilePath(ParamStr(0)); 
  // Здесь начинается программа инсталляции 
  // Переменная SrcPath показывает нам, откуда надо копировать файлы 
end.  

ну это так, навсякий случай.

ну и как быть?

Автор: Alexeis 15.11.2005, 10:19
Рабочую папку можно установить функцией SetCurrentDir

Автор: h2o 15.11.2005, 12:04
alexeis1
тоесть в такой последовательности:
1. создаём папку
2. копируем туда фаил
3. запускаем его
4. SetCurrentDir

и всё?
или как-то по друому надо?

Автор: Alexeis 15.11.2005, 13:40
вроде так.
SetCurrentDir установит рабочей папкой ту которая будет указана
в качестве параметра

Автор: h2o 16.11.2005, 08:58
точно! все работает! как все просто оказалось!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)