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

Вниз

Удалять файлы в корзину без ошибок и тормозов.   Найти похожие ветки 

 
Denis group   (2004-01-03 16:36) [0]

Удалять файлы в корзину без ошибок и тормозов.
Например в Win ХР файлы "NTUSER.DAT", "ntuser.dat.LOG" удалить нельзя и они вызывают ошибку или тормоза смотря как удалять. По какому признаку можно отличить эти блокированные файлы ?

Вот как я удаляю.

unit Unit1;

interface

uses ShellAPI,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
function Recycle(const FileName: string; Wnd: HWND = 0): Boolean;
var
FileOp: TSHFileOpStruct;
begin
FillChar(FileOp, SizeOf(FileOp), 0);
if Wnd = 0 then Wnd := Application.Handle;
FileOp.Wnd:=Wnd;
FileOp.wFunc:=FO_DELETE;
FileOp.pFrom:=PChar(FileName);
FileOp.fFlags:=FOF_ALLOWUNDO or FOF_NOERRORUI or FOF_SILENT;
Result:=(SHFileOperation(FileOp) = 0) and (not FileOp.fAnyOperationsAborted);
end;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Recycle(Edit1.Text, Handle);
end;

end.


 
CYBERWOLF   (2004-01-03 16:44) [1]

попробуй просто перемещать файлы в папку C:\Recycled. так проще и без изврата.


 
Denis group   (2004-01-03 17:49) [2]

А восстановить их потом можно ?


 
CYBERWOLF   (2004-01-03 18:00) [3]

естественно можно.
ты попробуй открыть эту папку и сверь ее содержимое с содержимым корзины. вообще-то, корзина - это и есть C:\Recycled или D:\Recycled итд.
хинт: эта директория скрытая, поэтому просто набери путь C:\Recycled.


 
DDA   (2004-01-03 18:32) [4]

Дак Попробуй открыть эти файлы


procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
i:=FileOpen("D:\Documents and Settings\DDA.DDA-DDA\ntuser.dat.LOG",fmOpenRead);
ShowMessage(SysErrorMessage(GetLastError)+" "+inttostr(i));
end;


и проверяй - есть ли ошибка при открытии
если I:=-1 тогда ShowMessage(SysErrorMessage(GetLastError)+" "+inttostr(i)); выдаст тебе ошибку
все файлы которые вернули ошибку не удаляешь в корзину и все


 
Denis group   (2004-01-03 18:42) [5]

DDA
Ша проверю.
CYBERWOLF
А просто перемещать чёто неполучилось.


 
CYBERWOLF   (2004-01-03 18:57) [6]

там вроде апишная функция (MoveFile вроде) - попробуй.
возможно перемещать не получается потому что эти файлы как раз блокированные. попробуй другие.
я сам это не проверял, но по идее должно работать.


 
Denis group   (2004-01-03 19:28) [7]

HandleFile:=FileOpen(PChar("Names"),fmOpenRead);
if HandleFile<>-1 then
begin
FileClose(HandleFile);
Recycle(PChar("Names"),Handle);см. выше
end;


Удаляются быстро и без ошибок но не все т.е. некоторые раньше удалялись теперь не хотят.


 
DDA   (2004-01-03 20:03) [8]

CYBERWOLF © (03.01.04 18:57) [6]
как они переместяться если к ним закрыт доступ
тут только открытием можно(наверное) проверить

Denis group © (03.01.04 19:28) [7]
как это монимать :
т.е. некоторые раньше удалялись теперь не хотят.


 
DDA   (2004-01-03 20:12) [9]

попробуй не просто открывать а открывать на чтение и запись и fmShareExclusive

i:=FileOpen("c:\dda.dda",fmOpenReadWrite or fmShareExclusive);

если будет доступ после этого - тогда точно можно будет удалить


 
Denis group   (2004-01-03 20:13) [10]

Я сначала пробую открыть, потом закрываю, если не закрыть файл то вобще не чё не удалить вот так то.
DDA
как это монимать :
DeleteFile их удаляет. Recycle тоже только если сначала не проверять(FileOpen), но тогда прога страшно тормазит.
Главно поместить в корзинку а как не имеет значения.


 
имя   (2004-01-03 22:25) [11]

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


 
Denis group   (2004-01-04 10:47) [12]

Ну кто самый умный ?
Кто ещё подскажет ?


 
Palladin   (2004-01-04 11:28) [13]

Ты наверное самый умный... умнее нет никого...


 
Denis group   (2004-01-04 13:26) [14]

Palladin
А ты сам попробуй.
ЗЫ


 
Denis group   (2004-01-04 14:23) [15]

Далеко не самый изящный вариант, но…

procedure TForm1.Button1Click(Sender: TObject);
var F: TextFile;
begin AssignFile(F, "1.exe");
{$I-} Append(F);
if IOResult = 0 then begin ShowMessage("Файл свободен");
CloseFile(F);
end
else ShowMessage("Файл занят");
{$I+}
end;


Так можно проверить на блокировку...
Уже проверяю...



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

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

Наверх





Память: 0.48 MB
Время: 0.01 c
6-49670
zxc
2003-11-14 14:54
2004.01.16
как програмно разрешить доступ к папке по FTP??


1-49498
Igloo
2004-01-03 16:43
2004.01.16
На форме доступны тока курсоры виндоса, а как свои ставить из


8-49648
ChekhlatyAndrew
2003-09-15 20:29
2004.01.16
масштабирование и конвертирование в ч б


14-49760
}|{yk
2003-12-22 17:44
2004.01.16
Кстати. А почему-таки умер С++Builder?


1-49629
rolex
2004-01-04 18:40
2004.01.16
Как в ListBox1 в каждую строчку записать имена файлов, из папки F





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