Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.08.31;
Скачать: [xml.tar.bz2];

Вниз

Подскажите как удалить папку   Найти похожие ветки 

 
lavgirls   (2008-07-23 17:21) [0]

Подскажите как удалить папку, програмным путем естественно.


 
Palladin ©   (2008-07-23 17:22) [1]

RemoveDir


 
lavgirls   (2008-07-23 17:25) [2]

Благодарствую


 
lavgirls   (2008-07-23 17:37) [3]

А содержимое почему не удалается?


 
sniknik ©   (2008-07-23 17:41) [4]

в сообщении об ошибке которая при этом происходит должно быть написано почему. читай ошибки.


 
Игорь Шевченко ©   (2008-07-23 17:41) [5]

Попробуй SHFileOperation


 
Johnmen ©   (2008-07-23 17:41) [6]


> А содержимое почему не удалается?

А разве должно?


 
lavgirls   (2008-07-23 17:42) [7]

было бы что читать


 
Медвежонок Пятачок ©   (2008-07-23 17:44) [8]

было бы что читать

Понятное дело. Это ж не "мурзилка"


 
sniknik ©   (2008-07-23 17:50) [9]

если нечего то поможет
GetLastError/SysErrorMessage или RaiseLastOSError, Win32Check.


 
Johnmen ©   (2008-07-23 17:53) [10]


> sniknik ©   (23.07.08 17:50) [9]
> ...то поможет GetLastError/SysErrorMessage или
> RaiseLastOSError, Win32Check.

Ты большой оптимист :)


 
Renegat ©   (2008-07-23 17:55) [11]

procedure SLE;
var lpMsgBuf: PChar;
begin
 FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER or FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError, LANG_NEUTRAL, @lpMsgBuf, 0, 0);
 MessageBox(0, lpMsgBuf, 0, 0);
 LocalFree(lpMsgBuf);
end;

Не идеал, конечно, но зато можно будет понять в чём дело. Вызывать сразу после выполнения сбоящей процедуры.


 
Ega23 ©   (2008-07-23 17:55) [12]

Собственно, ещё после [1] догадывался, что этим не кончится.
Автор, почитай хелп по RemoveDir.


 
sniknik ©   (2008-07-23 17:56) [13]

> Ты большой оптимист :)
"находит" иногда... ;(


 
Медвежонок Пятачок ©   (2008-07-23 17:58) [14]

Собственно, ещё после [1] догадывался, что этим не кончится.

А я после [0]

:)))


 
Медвежонок Пятачок ©   (2008-07-23 18:03) [15]

procedure SLE;
var lpMsgBuf: PChar;
begin
LocalFree(lpMsgBuf);
end;


HLOCAL LocalFree(
   HLOCAL hMem  // handle of local memory object
  );


 
Медвежонок Пятачок ©   (2008-07-23 18:06) [16]

Хотя гениям конечно простительно. У них D не установлена.


 
Anatoly Podgoretsky ©   (2008-07-23 18:11) [17]

Совет уже был в [5]
Но его надо повторять как мантру.

> Для всех операций с файлами всегда использовать SHFileOperation


 
Renegat ©   (2008-07-23 18:17) [18]

Удалено модератором


 
Медвежонок Пятачок ©   (2008-07-23 18:21) [19]

Удалено модератором


 
Медвежонок Пятачок ©   (2008-07-23 18:23) [20]

Удалено модератором


 
Renegat ©   (2008-07-23 18:25) [21]

Удалено модератором


 
Медвежонок Пятачок ©   (2008-07-23 18:25) [22]

Удалено модератором


 
Медвежонок Пятачок ©   (2008-07-23 18:26) [23]

Удалено модератором


 
Медвежонок Пятачок ©   (2008-07-23 18:29) [24]

Удалено модератором


 
Renegat ©   (2008-07-23 18:31) [25]

Удалено модератором


 
Медвежонок Пятачок ©   (2008-07-23 18:32) [26]

Удалено модератором


 
Медвежонок Пятачок ©   (2008-07-23 18:34) [27]

Удалено модератором


 
Renegat ©   (2008-07-23 18:34) [28]

Удалено модератором


 
Медвежонок Пятачок ©   (2008-07-23 18:38) [29]

Удалено модератором


 
Renegat ©   (2008-07-23 18:42) [30]

Удалено модератором


 
Медвежонок Пятачок ©   (2008-07-23 18:44) [31]

Удалено модератором


 
Тын-Дын ©   (2008-07-23 18:53) [32]

Удалено модератором


 
Anatoly Podgoretsky ©   (2008-07-23 18:54) [33]

Удалено модератором


 
Anatoly Podgoretsky ©   (2008-07-23 18:55) [34]

Удалено модератором


 
Тын-Дын ©   (2008-07-23 18:56) [35]

Удалено модератором


 
Amoeba ©   (2008-07-23 19:01) [36]

Автору вопроса сюда (о SHFileOperation):
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=91


 
Anatoly Podgoretsky ©   (2008-07-23 19:09) [37]

Удалено модератором


 
Тын-Дын ©   (2008-07-23 20:13) [38]

Удалено модератором


 
Denis__ ©   (2008-07-23 20:20) [39]

procedure DelFolder(sPath : String; var DelFilesCount, DelDirsCount,
   NoDelFilesCount, NoDelDirsCount : Integer);
 procedure DF(path : String; var DFC, DDC, NDFC, NDDC : Integer);
 var
   fr : TSearchRec;
 begin
   FindFirst(path + "\*.*", faAnyFile, fr);
   repeat
     if (fr.Name <> ".") AND (fr.Name <> "..") AND
       (fr.Attr AND faDirectory = faDirectory) then
     begin
       DF(path + "\" + fr.Name, DFC, DDC, NDFC, NDDC);
       try
         RmDir(path + "\" +fr.Name);
         Inc(DDC);
       except
         Inc(NDDC)
       end;
     end;
   until FindNext(fr) <> 0;
   FindClose(fr);

   FindFirst(path + "\*.*", faAnyFile, fr);
   repeat
     if (fr.Name <> ".") AND (fr.Name <> "..")
       AND (fr.Attr AND faDirectory <> faDirectory) then
     begin
       if DeleteFile(path + "\" + fr.Name) then
         Inc(DFC)
       else
         Inc(NDFC);
     end;
   until FindNext(fr) <> 0;
   FindClose(fr);
 end;
begin
 DelFilesCount := 0;
 DelDirsCount := 0;
 NoDelFilesCount := 0;
 NoDelDirsCount := 0;
 DF(sPath, DelFilesCount, DelDirsCount, NoDelFilesCount, NoDelDirsCount);
end;

Мастера, покритикуйте код, плиз. Только по теме, что можно улучшить, исправить.


 
Loginov Dmitry ©   (2008-07-23 22:07) [40]

> покритикуйте код, плиз. Только по теме, что можно улучшить,
> исправить.


1) Нет анализа результата функции FindFirst(). Если поиск (вдруг) не начался, то и FindClose() вызывать не следует.
2) Зачем два цикла поиска? Что, одним нельзя обойтись?
3) Функция не удаляет указанную папку. Автор обидется :)
3) Если уж критиковать по полной ;) В чем информативность дополнительных 4х переменный. Можно, чтобы функция возвращала результат, удалось ли удалить содержимое из указанной папки или нет. Еще: каждый раз объявлять 4 переменные - замучаешься. Лучше параметры вместо var сделать PInteger и внутри функции проверять на Assigned().


 
Johnmen ©   (2008-07-23 22:17) [41]


> Johnmen ©   (23.07.08 17:53) [10]
> > sniknik ©   (23.07.08 17:50) [9]
> > ...то поможет GetLastError/SysErrorMessage
> > или RaiseLastOSError, Win32Check.
> Ты большой оптимист :)

Большой оптимист в отношении аффтара.


 
{RASkov} ©   (2008-07-23 22:43) [42]

> [39] Denis__ ©   (23.07.08 20:20)

Гы.... делать было нечего и вот тоже "набросал":
type
 TDelDirResult = record
  DelFilesCount, DelDirsCount,
  NoDelFilesCount, NoDelDirsCount: Integer;
 end;

function DelDir(const PathDel: String): TDelDirResult; overload;
procedure DirDelete(ADir: String; var DDR: TDelDirResult);
var SR: TSearchRec;
begin
  ADir :=IncludeTrailingPathDelimiter(ADir);
  if FindFirst(ADir + "*.*", faAnyFile, SR)=0 then
  try
  repeat
   if (SR.Name = ".") or (SR.Name = "..") then Continue;
   if (SR.Attr and faDirectory = faDirectory) then begin
    DirDelete(ADir + SR.Name, DDR);
   end else
    if DeleteFile(ADir + "\" + SR.Name) then
     Inc(DDR.DelFilesCount) else Inc(DDR.NoDelFilesCount);
  until FindNext(SR) <> 0;
  finally
   FindClose(SR);
   try
    RmDir(ADir);
    Inc(DDR.DelDirsCount);
   except
    Inc(DDR.NoDelDirsCount);
   end;
  end;
end;
begin
 with Result do begin
  DelFilesCount:=0;
  DelDirsCount:=0;
  NoDelFilesCount:=0;
  NoDelDirsCount:=0;
 end;
 DirDelete(PathDel, Result);
end;

function DelDirBool(const PathDel: String): Boolean; overload;
var DDR: TDelDirResult;
begin
 DDR:=DelDir(PathDel);
 Result:=(DDR.NoDelFilesCount=0) and (DDR.NoDelDirsCount=0) and (DDR.DelDirsCount>0);
end;

// Вызов
procedure TForm1.Button1Click(Sender: TObject);
begin
 with DelDir("C:\Temp\123") do
  ShowMessage(Format("Удалено %d файлов, %d - директорий"#13#10"Пропущено: %d - файлов, %d - директорий"
  , [DelFilesCount, DelDirsCount, NoDelFilesCount, NoDelDirsCount]));
 //или
 //if DelDirBool("C:\Temp\123") then ShowMessage("Успех") else ShowMessage("Провал");
end;

:)


 
{RASkov} ©   (2008-07-23 22:45) [43]

overload"ы только не нужно... т.е. их нужно убрать :)
Хотел было сделать перегруженную, но параметр один, а результат не является разницей.... в общем ...нужно убрать оверлоад :)


 
No_Dead ©   (2008-07-23 23:02) [44]

сорри, за оффтоп
вот каков смысл этого всего(ветки на 43+1 поста)?
5 секунд потратил что бы в гугл забить запрос, и 2 сек что бы скопипастить...
вот кто сможет объяснить такое явление как &laquo;анти-гугл&raquo;?

ЗЫ. не первый раз вижу подобное, и просто дико интересно почему так...


 
Renegat ©   (2008-07-23 23:03) [45]

Гы... у меня где-то валялась функция удаления папок через прерывание 21h...
Если найду - выложу непременно, раз уж такая пьянка пошла %)

А вообще - юзайте DELTREE %)


 
{RASkov} ©   (2008-07-23 23:27) [46]

> [45] Renegat ©   (23.07.08 23:03)
> Если найду - выложу непременно

Не нужно. No_Dead ругаться будет :) шутка)

ЗЫЖ А я вот на основании

> 3) Функция не удаляет указанную папку. Автор обидется :)

добавил дополнительный параметр в первую DelDir(теперь они перегруженные)
Во как:
 function DelDir(const PathDel: String; IsOnlyClearDir: Boolean): TDelDirResult; overload;
 function DelDir(const PathDel: String): Boolean; overload;

Например, с IsOnlyClearDir=True удобно папку темп чистить :))

ЗЫЖЖ Эх... пойду-ка я лучше спать)


 
Германн ©   (2008-07-24 01:52) [47]


> {RASkov} ©   (23.07.08 23:27) [46]
>
> > [45] Renegat ©   (23.07.08 23:03)
> > Если найду - выложу непременно
>
> Не нужно. No_Dead ругаться будет :) шутка)
>
> ЗЫЖ А я вот на основании
>
> > 3) Функция не удаляет указанную папку. Автор обидется
> :)
>
> добавил дополнительный параметр в первую DelDir(теперь они
> перегруженные)
> Во как:
>  function DelDir(const PathDel: String; IsOnlyClearDir:
> Boolean): TDelDirResult; overload;
>  function DelDir(const PathDel: String): Boolean; overload;
>
> Например, с IsOnlyClearDir=True удобно папку темп чистить
> :))
>
>

DelDir <> ClearDir!
Нафига делать перегрузку, если перегружаемая функция делает нечто другое "по сути"?


 
Vad ©   (2008-07-24 06:56) [48]

Читаем справку по RxLib

Unit

FileUtil

Declaration

function ClearDir(const Path: string; Delete: Boolean): Boolean;

Description
Функция удаляет все файлы из каталога Path и его подкаталогов. Если параметр Delete имеет значение True, то функция также удаляет сам каталог,
заданный параметром Path и все его подкаталоги. При удалении файлов игнорируется аттрибут Read-Only. При успешном завершении функция возвращает
значение True, в противном случае - False.


Все в этом мире уже когда-то было и новое придумать сложно... )))


 
Denis__ ©   (2008-07-24 10:35) [49]


> 1) Нет анализа результата функции FindFirst(). Если поиск
> (вдруг) не начался, то и FindClose() вызывать не следует.
>
> 2) Зачем два цикла поиска? Что, одним нельзя обойтись?
> 3) Функция не удаляет указанную папку. Автор обидется :)
> 3) Если уж критиковать по полной ;) В чем информативность
> дополнительных 4х переменный. Можно, чтобы функция возвращала
> результат, удалось ли удалить содержимое из указанной папки
> или нет. Еще: каждый раз объявлять 4 переменные - замучаешься.
>  Лучше параметры вместо var сделать PInteger и внутри функции
> проверять на Assigned().


1) Да. Не подумал.
2) Зачем-то мне это было нужно %) Не помню, какая тогда была логика. Вроде того, что сначала добраться до конечной папки(в которой нет вложенных) а потом уже начинать удалять файлы.
3)Да там только одну строчку добавить:) и действительно, делал сначала DelFolder, а получилось ClearFolder.
4)Да, у {RASkov} ©  [42]  это сделано лучше. Да и переменные это так - блаж была, чтоб статистику выдавать - столько удалено, столько - нет.

И всё?! А обычно сразу такой поток негативной критики. Неужели я начал писать хоть немного правильный код?


 
Anatoly Podgoretsky ©   (2008-07-24 11:32) [50]


> Неужели я начал писать хоть немного правильный код?

Прогресс есть.


 
{RASkov} ©   (2008-07-24 11:35) [51]

> [47] Германн ©   (24.07.08 01:52)
> DelDir <> ClearDir!
> Нафига делать перегрузку, если перегружаемая функция делает
> нечто другое "по сути"?

Да, согласен. Чего-то я тут перемудрил вчера.... да еще в соседней ветке, GLScene попутал с GExperts :( Бывает...


 
Игорь Шевченко ©   (2008-07-24 11:41) [52]

Медвежонок Пятачок ©
Тын-Дын ©
Renegat ©

Для разборок на сайте придуман чат, в крайнем случае конференция "Прочее" по адресу
http://dev2.delphimaster.ru/forum/other/


 
Медвежонок Пятачок ©   (2008-07-24 11:42) [53]

Удалено модератором



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.08.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.007 c
2-1216799306
Квэнди
2008-07-23 11:48
2008.08.31
Сообщений Windows на открытие URL


1-1197370290
ZLinX
2007-12-11 13:51
2008.08.31
Регион


2-1216925827
Agentx
2008-07-24 22:57
2008.08.31
Графика


1-1197393925
BruceW
2007-12-11 20:25
2008.08.31
Полноценные формы


15-1215755158
shlst
2008-07-11 09:45
2008.08.31
А чего это дедушки волнуются -





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский