Tam Sürümünü Görmek İçin : dizinleri alt dizinleri ve dosyalari ile kopyalama ve attribute olayi
Hard`n`Dark
24/03/2003, 11:53
merhaba,
Delphi'de
1.)
bir dizini altindaki tum alt dizinler ve dosyalarla beraber en kisa ve basit olarak baska bir dizine nasil kopyalayabiliriz?
2.)
kopyaladiktan sonra, bu dizinin read-only olan attribute'unu nasil degistirebiliriz? (alt dizinleri ve dosyalari ile beraber) SetFileAttributes(pchar("hede.txt"),FILE_ATTRIBUTE_NORMAL); olayi degil yani benim olayim.. recursive gibi bi seyler olmali..
saygilar
Volkan Uzun
24/03/2003, 13:17
delph hiç bilmem ama, recursive fonk kendin winapi ile yazabilirsin, findfile ve setfile attributes ile bunun dısında msdn de bulamadım recursive bunu yapan. aynı şekilde bir fonksiyon yazıp findfile ile dönüp copy de yapabilirsin.
Hard`n`Dark
24/03/2003, 13:24
muhakkak ugrasan birileri olmustur.
tekerlegi yeniden icat etmenin anlami olmasa gerek..
Volkan Uzun
24/03/2003, 13:46
istersen msdn hazır yapılmıs ornek var c icin.
Hard`n`Dark
24/03/2003, 13:57
bu olay biraz acil...
delphi'de dedigim olaylari yapmis, ya da kodunu bi yerlerde gormus, duyan bilen biri varsa eger "mumkunse" buraya kodu paste ederse ya da URL verirse cok minnettar kalacagim..
Sedat Atif
24/03/2003, 22:20
Hardndark, faydalı olur mu bilmiyorum ama DelphiTurk kodbankta birşeyler var.
Aynen yapıştırıyorum:
{
Öncelikle doskomutu denen prosedürü
(buralarda bir yerdeydi kodbankta)
unit içine ekleyin. Aşağıya da yazdım.
Sonra da herhangi bir nesneye (buton gibi)
ya da formda herhangi bir event içine
ikinci prosedürü yazın.
EditBox lar kullanılarak kullanıcıdan girdi
de alınabilir komut satırı oluşturmak için.
}
procedure doskomutu(komut:string;mesajver:boolean);
var
Startupinfo:TStartupinfo;
ProcessInfo:TProcessInformation;
begin
if terminateprocess(processinfo.hProcess,0)=NULL then
begin
if mesajver then showmessage('Devam eden islem iptal edilemedi');
exit;
end;
FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.wShowWindow := SW_HIDE;
StartupInfo.dwFlags:=STARTF_USESHOWWINDOW;
if not CreateProcess(nil,
Pchar('c:\command.com /c '+komut),
nil,
nil,
true,
NORMAL_PRIORITY_CLASS,
nil,
nil,
StartupInfo,
ProcessInfo) then
begin
if mesajver then
ShowMessage('Islem gerceklestirilemedi')
end
else
begin
if mesajver then ShowMessage('Islem tamam')
end;
end;
//////////////////////////////////////////////
procedure TForm1.Button1Click(Sender: TObject);
begin
doskomutu('xcopy c:\Klasor d:\Klasor1 /E',false);
end;
------------------------
// Unuttuğum bir şey var...
{
İkinci klasörün mutlaka var olması gerekir.
Yoksa ne olur biliyorsunuz di mi?
Kaynak klasörünüz hedef klasör adında bir
dosya içinde toplanır. O da kimsenin işine
yaramaz tabi. Eğer klasör yoksa, hatta var
olduğundan emin olsanız bile olşturmaya
çalışın...........
}
procedure TForm1.Button1Click(Sender: TObject);
begin
try
MkDir('d:\Klasor');
doskomutu('xcopy c:\Klasor d:\Klasor /E',false);
except
doskomutu('xcopy c:\Klasor d:\Klasor /E',false);
end;
end;
---------------------------
Asagidaki kod örneginde, bir klasörün "Hidden" özelligi degistirilmektedir.
Function DirectoryHide(Const FileString : String): Boolean;
Var
Attributes : Integer;
Begin
Result := False;
Try
If Not DirectoryExists(FileString) Then Exit;
Attributes := faDirectory + faHidden + faSysFile;
FileSetAttr(FileString,Attributes);
Result := True;
Except
End;
End;
---
Function DirectoryUnHide(Const FileString : String): Boolean;
Var
Attributes : Integer;
Begin
Result := False;
Try
If Not DirectoryExists(FileString) Then Exit;
Attributes := faDirectory;
FileSetAttr(FileString,Attributes);
Result := True;
Except
End;
End;
-------------------
//kullanımı
procedure TForm1.Button1Click(Sender: TObject);
begin
FileSetAttr('C:\windows\desktop\a.txt', faHidden);
end;
//diğer attribute'ler
faReadOnly //salt okunur
faHidden //gizli
faSysFile //sistem dosyası
faVolumeID //bi boka yaramıyo
faDirectory //buda bi boka yaramıo
faArchive //arşiv
faAnyFile //salt okunur + gizli + sistem dosyası + arşiv
//başka bi kullanımı
FileSetAttr('C:\Autoexec.bat', faReadOnly + faHidden);
//dosya attribute olayını boş bırakmak için
if (FileGetAttr(FileName) and faReadOnly) > 0
then FileSetAttr(FileName, FileGetAttr(FileName) xor faReadOnly);
//yeniden salt okunur olarak ayarlamak
FileSetAttr(FileName, FileGetAttr(FileName) or faReadOnly);
Forum Yazılımı : vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.