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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2009, 08:51   #1
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию Проблема удаления папок и файлов

Естьу меня одна маленькая программа, она удаляет рядом с собой все папки и файлы, но когда находится в этой же папке. А если этот же код встроить в другую программу, т.е. удаление происходит не рядом с собой, а в другой папке, то удаляются не все объекты. Я уже забодался с этим бороться.
Вот код на API:

Код:
program API_Delete; 
uses Windows,Messages,SysUtils,ShellAPI;
{$R dialog.res}

procedure Del;
var SR:TSearchRec;
    SHFP:SHFILEOPSTRUCT;
    Put:string;
begin
   Put:='H:\1\';//это путь к папке, которую хотим очистить
   if FindFirst(Put+'*.*',faHidden or faSysFile or faVolumeID or faDirectory,SR)=0 then
   repeat
    if(SR.Name<>'.')and(SR.Name<>'..')and(SR.Size<>43520)then//чтоб не удалил сам себя
    begin
       ZeroMemory(@SHFP,SizeOf(SHFP));
       with SHFP do
       begin
          wFunc:=FO_DELETE;
          pFrom:=PChar(Put+SR.Name);
          fFlags:=FOF_NOCONFIRMATION;
       end;
       SHFileOperation(SHFP);
    end;
   until FindNext(SR)<>0;
   FindClose(SR);
end;

//----- функция обработки сообщений -----------------------------------
function DlgProc(wnd:HWND;msg:integer;wparam:WPARAM;lparam:LPARAM):LRESULT;stdcall;
begin
   case msg of
   //----- готовим окно к созданию ---------------------------------------
   HCBT_CREATEWND:ShowWindow(Wnd,sw_Hide);//но оно будет скрытым
   //----- при запуске формы ---------------------------------------------
   WM_InitDialog:
   begin
      if(FileExists('1.txt')=False)then Del;//ограничитель - если есть этот файл, то ничего не удалит
      PostQuitMessage(0);
      Result:=0;
      Exit;
   end;
   //----- выход ---------------------------------------------------------
   WM_Destroy,WM_Close:
   begin
      PostQuitMessage(0);
      Result:=0;
      Exit;
   end;
   //-----------------------------------------------------------------------
   end;
   Result:=0;
end;

begin
   //----- создание главного окна программы -----------------------------
   DialogBox(hInstance,'MAIN_WINDOW',0,@DlgProc);
end.
И вот что тут не так? Кто скажет точно, почему в другой директории не хочет удалять, а рядом с собой стирает всё нафиг?
Вложения
Тип файла: rar Project1.rar (21.3 Кб, 11 просмотров)
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 30.10.2009, 09:23   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

попробуйте поиграться с аттрибутами файлов из другой директории, возможно там для чтения или архивный... а вы им поменяйте на:
Код:
SetFileAttributes(filename,faVolumeID);
    deletefile(filename);
кроме того, где у вас проверка что файл не занят? если он занят, то нужно еще и принудительно очищать их handle в памяти, как это делает unlocker.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 30.10.2009 в 09:27. Причина: а вот exe не нужен, хотите чтоб код проверили, выкладывайте...
raxp вне форума Ответить с цитированием
Старый 30.10.2009, 13:13   #3
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

Атрибуты я все снимаю функцией windows.SetFileAttributes(PChar(Put +SR.Name),0); - это работает точно, проверял не раз.
А вот папки и файлы специально копировал в отдельную папку и пытался их удалить. Файлы сметает сразу, а вот некоторые папки... Некоторые непустые удаляет, а некоторые (тоже непустые) не хочет... в чём между ними различие - никак не понять?!!! Обычные папки: в один 6 файлов простых и в других тоже всякого мусора навалено для проверки удаления.

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

Последний раз редактировалось NetSpace; 30.10.2009 в 13:25.
NetSpace вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Защита файлов от удаления (assembler) Omega1 Помощь студентам 16 17.11.2010 16:14
Не могу организовать цикл удаления файлов dolphin705 Общие вопросы Delphi 5 08.05.2009 13:39
Проблема. Поиск папок и файлов. Delphi7 Lancer Помощь студентам 3 09.04.2009 21:21
Защита файлов от удаления Viteef Свободное общение 5 15.06.2007 22:44
Защита файлов от удаления Viteef Общие вопросы Delphi 10 02.06.2007 07:40