mevcut bir klasörün adını değiştirme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

mevcut bir klasörün adını değiştirme

Mesaj gönderen nitro »

forumda aradım ama bulamadım,
içinde birsürü dosya, klasör vs. olan bir klasörün adını Delphi'den komut ile değiştirmek istiyorum.
nasıl yaparım?
saygılarımla
Kullanıcı avatarı
huseyinkucuk
Üye
Mesajlar: 142
Kayıt: 29 Nis 2005 10:03
Konum: İstanbul
İletişim:

Mesaj gönderen huseyinkucuk »

Öncelikle "içinde bir sürü dosya ve klasör olan bir klasörü kopyalayan" ve "içinde bir sürü dosya ve klasör olan klasörü silen" fonksiyonları Tansu Türkoğlu'nun kitabından aldığımı söylemek isterim... Bunlarla birlikte bu işi şöyle yaptım; önce yeni klasör açılıyor, bütün dosyalar yeni klasöre kopyalanıyor ve eski klasör içindekilerle birlikte siliniyor... Yani bildiğimiz klasör ismi değiştirmeyi beceremedim ama en azından küçük boyuttaki klasörler için (normal şekillerde yapmanın yolunu bulamadığımız takdirde) kullanılabilir...

Kod: Tümünü seç

uses shellapi;
{$R *.dfm}

function TForm1.CopyFileAndDirectory(von, zieldir: string): boolean;
var
  fos:TSHFileOpStruct;
begin
  ZeroMemory(@fos,SizeOf(fos));
  With fos do
  begin
    wFunc:=FO_COPY;
    fFlags:=FOF_MULTIDESTFILES;
    pFrom:=pchar(von+#0);
    pTo:=pchar(zieldir);
  end;
  Result:=(0=SHFileOperation(fos));
end;
/////////////////////////////////////////////////////////
function TForm1.DeleteFileAndDirectory(von: string): boolean;
var
  fos:TSHFileOpStruct;
begin
  ZeroMemory(@fos,SizeOf(fos));
  With fos do
  begin
    wFunc:=FO_DELETE;
    fFlags:=FOF_MULTIDESTFILES+FOF_NOCONFIRMATION;
    pFrom:=pchar(von+#0);
  end;
  Result:=(0=SHFileOperation(fos));
end;
////////////////////////////////////////////////////////////////////
 function TForm1.KlasorAdiDegistir(EskiKlasorYolu,YeniKlasorYolu: string): boolean;
begin
  CopyFileAndDirectory(EskiKlasorYolu,YeniKlasorYolu);
  DeleteFileAndDirectory(EskiKlasorYolu);
end;

Örneğin;
KlasorAdiDegistir('c:\deneme','c:\YeniDeneme');
gibi kullanılıyor... fonksiyon boolean döndürmesi gerekiyo ama onu yapmayı unutmuşum :) Kolay gelsin...
29.04.2005 tarihi itibariyle Delphi öğrenmeye başlayan yeni bir kullanıcı sayılabilirim.
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

hocam movefile diye bişey buldum ben ama pek sağlıklı çalışmıyor, bi de sizin verdiğiniz kodu deneyeyim.
teşekkürler
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

hocam kodu denedim, yapmaya çalıştığım programda bir klasör adını deiştiriyorum. mesela merkez klasörünü CO diye değiştiriyorum, daha sonra CO klasörünü merkez diye değiştirmeye çalıştığım zaman "kaynak dosya veya diskten okunamıyor" diye bir hata veriyor.
imkanı olanlar kodu denerlerse sevinirim.
amacımız bir klasörün adını değiştirmek, sonra yine eski adını geri vermek.
Kullanıcı avatarı
huseyinkucuk
Üye
Mesajlar: 142
Kayıt: 29 Nis 2005 10:03
Konum: İstanbul
İletişim:

Mesaj gönderen huseyinkucuk »

Gönderdiğim kod bende çalıştı. (c:\deneme diye klasör açtım, içine rasgele dosyalar attım ve klasörler oluşturdum, bu klasörlerin içine de rasgele dosyalar koydum sonra prosedüre 'c:\deneme','c:\SonucDeneme' parametrelerini gönderdim, sonucdeneme klasörü oluşmuş, deneme klasörü de yok, bir nevi ismi değişmiş yani)

hocam, gönderdiğim prosedürü ne şekilde kullandığını yazar mısın? Muhtemelen başka bir sebepten dolayı o uyarı mesajını veriyor. Kodu gönderir misin? Kolay gelsin...
29.04.2005 tarihi itibariyle Delphi öğrenmeye başlayan yeni bir kullanıcı sayılabilirim.
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

hocam değişiyor ona itirazım yok ama, sonucdeneme klasörünü tekrar deneme olarak değiştirin yine, ne demek istediğimi göreceksiniz.
Kullanıcı avatarı
huseyinkucuk
Üye
Mesajlar: 142
Kayıt: 29 Nis 2005 10:03
Konum: İstanbul
İletişim:

Mesaj gönderen huseyinkucuk »

Kod: Tümünü seç

procedure TForm1.Button3Click(Sender: TObject);
begin
  KlasorAdiDegistir('c:\deneme1','c:\deneme2');
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  KlasorAdiDegistir('c:\deneme2','c:\deneme1');
end;
button3 ve button4 e tekrar tekrar bastım, her basışımda sonra c:\ ye baktım... Herhangi bir problem gözükmüyor bende...
29.04.2005 tarihi itibariyle Delphi öğrenmeye başlayan yeni bir kullanıcı sayılabilirim.
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

hocam o zaman benim sistemde bir sorun vardır.
başka bir makinede deneyeyim.
ilginiz için teşekkürler.
saygılarımla
Kullanıcı avatarı
huseyinkucuk
Üye
Mesajlar: 142
Kayıt: 29 Nis 2005 10:03
Konum: İstanbul
İletişim:

Mesaj gönderen huseyinkucuk »

rica ederim...
29.04.2005 tarihi itibariyle Delphi öğrenmeye başlayan yeni bir kullanıcı sayılabilirim.
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

bir programcıyı çıldırtacak bir hata.
işlem yapmaya çalıştığım klasörün adı CO
ben kodlarda bir yere yanlışlıkla C0 ( c sıfır) yazmışım o nedenle bunca zaman uğraştırdı beni.
bu sıfır ile o tuşu niye bu kadar yakın birbirine kardeşiiim :(
Cevapla