Çöp kutusuna göndermeden dizin silme
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 261
- Kayıt: 21 Tem 2006 04:59
- İletişim:
Çöp kutusuna göndermeden dizin silme
Selam arkadaşlar.... Projemde yedekleme sistemi içerisnde kopyalama yöntemi kullanıyorum. Ancak bir projemde kopyalanacak dosyaların yanında bir de klasör var. İçerisinde üye resimleri saklanıyor. Kopyalama yaparken hedef dosyada bu klasör olunca windows bu dosya var ne yapayım mesajı çıkıyor. Otomatik yedeklme işleminde bu mesaş hoş olmuyor. Ben de önce klasör varsa sildiriyorum sonra kopyalıyorum. Ancak bu defa bir mantık hatası oluşabilir çelişkisine düşüyorum. o da kullanıcıların çöp kutusuna gidip bakmaları "aaaaa bu niye bura gelmiş" deyip tekrar geri yüklemeleri korkutuyor beni açıkçası. (biz programcılar en saf kullanıcıları baz alarak hatasız program yapmak zorundayız olabilecek ihtimalleri düşünmemiz gerekiyor) Bunun için çöp kutusuna göndermeden dizin silme işlemi yapmam lazım ya da klasörün aynısı varsa değiştirme yaparken mesaj vermmesi lazım. Bu konuda yardımcı olabilecek arkadaşlar varsa teşekkürlerimi iletiyorum.
Re: Çöp kutusuna göndermeden dizin silme
Kod: Tümünü seç
function DelDir(dir: string): Boolean;
var
fos: TSHFileOpStruct;
begin
ZeroMemory(@fos, SizeOf(fos));
with fos do
begin
wFunc := FO_DELETE;
fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
pFrom := PChar(dir + #0);
end;
Result := (0 = ShFileOperation(fos));
end;
Bir kelimenin anlamını öğretsen bile yeter..
Re: Çöp kutusuna göndermeden dizin silme
Uses Shellapi yazmayı unutmadan alttaki kod bloğunu kullanarak
kullanıcının haberi olmadan dizin ve alt dizindeki dosyaları silebilirsiniz
kullanıcının haberi olmadan dizin ve alt dizindeki dosyaları silebilirsiniz
Kod: Tümünü seç
procedure DelTree(const DirName: string);
var
{ This procedure uses recursive calls to traverse directory
structures, so pointers are used to keep stack usage to a
minimum }
SearchRec: ^TSearchRec;
FileName: PString;
GotOne: Integer;
begin
if trim(DirName)='' then exit;
{ Disable input/output checking }
{$I-}
{ Allocate new TSearchRec record and a new FileName string }
New(SearchRec);
New(FileName);
try
GotOne := FindFirst(DirName + '\*.*', faAnyFile, SearchRec^);
while (GotOne = 0) do
begin
with SearchRec^ do
begin
FileName^ := DirName + '\' + Name;
{ Is the current file a directory? }
if ((Attr and faDirectory) = 0) then
begin
{ The current file is not a directory. Delete it if
it's not a system or volume ID file }
if ((Attr and (faSysFile or faVolumeID)) = 0) then
begin
{ Change the file's attributes if it's marked as
read-only }
if ((Attr and faReadOnly) <> 0) then
FileSetAttr(FileName^,
FileGetAttr(FileName^)
and (not faReadOnly));
DeleteFile(FileName^);
end; { end if }
end
else if ((Name <> '.') and (Name <> '..')) then
{ The current file is a directory. Call ourselves
recursively so that we traverse the sub directory
structure }
DelTree(FileName^);
end; { end with }
GotOne := FindNext(SearchRec^);
end; { end while }
FindClose(SearchRec^);
RmDir(DirName);
finally
{ Dispose of the memory allocate for the TSearchRec record and
FileName string }
Dispose(FileName);
Dispose(SearchRec);
end; { end try }
{ Re-enable input/output checking }
{$I+}
end;
// KULLANIMI
procedure TForm1.Button1Click(Sender: TObject);
begin
deltree('c:\test\');
CreateDirectory('c:\test',nil);// sonra tekrar klasörümüzü oluşturuyoruz
end;
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
-
- Üye
- Mesajlar: 261
- Kayıt: 21 Tem 2006 04:59
- İletişim:
Re: Çöp kutusuna göndermeden dizin silme
teşekkür ediyorum arkadaşlar. verdiğiniz yanıtlarla sorun çözüldü.
Re: Çöp kutusuna göndermeden dizin silme
Konuyu hortlattım ama lazım olur birilerine...
var
T:TSHFileOpStruct;
fillchar(T, sizeof(T), 0 );
with T do begin
Wnd:=0;
wFunc:=FO_DELETE;
pFrom := pchar(ExtractFilePath(Application.ExeName)+'Hedef Klasörün\'+'*.*' + #0);
fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
end;
SHFileOperation(T);
Bu kodla Klasör silip oluşturmaya gerek yok. Hedef Klasördeki tüm dosyaları Geri Dönüşüm kutusuna atmadan silebilirsin.
*.* yazmazsan Klasörü silersin.
var
T:TSHFileOpStruct;
fillchar(T, sizeof(T), 0 );
with T do begin
Wnd:=0;
wFunc:=FO_DELETE;
pFrom := pchar(ExtractFilePath(Application.ExeName)+'Hedef Klasörün\'+'*.*' + #0);
fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
end;
SHFileOperation(T);
Bu kodla Klasör silip oluşturmaya gerek yok. Hedef Klasördeki tüm dosyaları Geri Dönüşüm kutusuna atmadan silebilirsin.
*.* yazmazsan Klasörü silersin.