Ağ dan dosya kopyalama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Ağ dan dosya kopyalama

Mesaj gönderen haydarxxx »

ağdan dosya kopyala ile ilgili aşağıdaki kod u deniyorum ama dosya kopyalanamıyor.kaynak dosya veye diskten okunamıyor uyarısı alıyorum

Kod: Tümünü seç

var
a:integer;
b:string;
OpStruc: TSHFileOpStruct; ///shellapi usese ekle

frombuf, tobuf: Array [0..128] of Char;
  Makine_ismi:array[0..255] of char;
  BufferSize:DWORD;
  SERVER_ADI : String;
INIDosya : TIniFile;
  begin

b :=Edit1.text+'_'+form2.QRY_OKULSABIT.fieldbyname('DONEMI').asstring+' Tarihli Yedekleme Almak İstiyormusunuz';
a:=application.MessageBox (PChar(b),'Uyarı',mb_yesno+mb_iconinformation);

if a=idyes then
begin
  //ini dosyasını okutma
INIDosya := TIniFile.Create('C:\KursKayıt\Database.ini');
SERVER_ADI:= INIDosya.ReadString('AYAR','SERVER','');
INIDosya.Free;
//ini dosyasını okutma

  fillChar( OpStruc, Sizeof(OpStruc), 0 );
  FillChar( frombuf, Sizeof(frombuf), 0 );
  FillChar( tobuf, Sizeof(tobuf), 0 );
  StrPCopy( frombuf, SERVER_ADI+':C:\KursKayıt\Data\*.fdb' );
  StrPCopy( tobuf, 'C:\KursKayıt\Yedek\'+Edit1.text+'_'+form2.QRY_OKULSABIT.fieldbyname('DONEMI').value);
  With OpStruc DO Begin
    Wnd:= Handle;
    wFunc:= FO_COPY;
    pFrom:= @frombuf;
    pTo:=@tobuf;
    fFlags:= FOF_NOCONFIRMATION;
  end;
  ShFileOperation( OpStruc );//db dataları aktarılıyor


b:='C:\KursKayıt\Yedek\...'+Edit1.text+'_'+form2.QRY_OKULSABIT.fieldbyname('DONEMI').asstring+' altına yedekleme yapıldı..' ;
a:=application.MessageBox (PChar(b),'Yedekleme Tamam',+mb_iconinformation);


 end;
 end;
buradaki mantık doğrumu hata nerede vaya ağdan istediğimiz dosyayı nasıl çekeriz.Bilgisi ve ilgisi olan arkadaşlara şimdiden teşekkürler
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Karışık bir uygulama olmuş. Başka formdan / veritabanından, INI dosyadan bilgi alıyor olduğundan deneme şansım yok.

- Bu işlemi manuel yapabiliyor olman lazım. Şöyle ki ağdaki kaynak klasör ile hedef klasörünü birer değişkene alıp ekrana yansıt. Bir InputQuery işini daha da kolaylaştırır. Buaran mouse ile kaynak ve hedef dosya adlarını alıp explorer penceresinde bir dene. Kaynak dosyaya ulaşabiliyorsan kodunda bir hata var demektir. Aksi ise ağ yetkiler vb. durumlar devreye giriyor.
Resim
Resim ....Resim
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Koddan ben de pek bi şey anlamadım, fakat

Eğer hedef bilgisayarda ağa açık bi klasöre kopylama yapıyorsanız

CopyFile('C:\deneme.txt', '\\HedefBilgisayarAdi\KlasorAdi\deneme.txt', False)
şeklinde kopyalama yapabilirsiniz.

Hedef klasör ağa açık değil ve client-server programları kullanarak yapacaksanız @drony'nin yayınladığı işe yarar, temiz bi kod var :ara

Kolay gele
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Kodları kendimce açıklamaya çalışayım.Terminal makina için yapmış olduğum exe de olacak bu kod ve terminal makinamda bir ini dosyası var ve içinde anamakinanın adı server bölümünda kayıtlı ve aşağıdaki kod ile server adını okutuyorum.

Kod: Tümünü seç

SERVER_ADI:= INIDosya.ReadString('AYAR','SERVER','');
daha sonra kopyalanacak dosyanın nereden alınacağını belirtiyorum.

Kod: Tümünü seç

StrPCopy( frombuf, SERVER_ADI+':C:\KursKayıt\Data\*.fdb' );


burada anamkinanın adı örneğin Umut+':C:\KursKayıt\Data\*.fdb' ) şeklinde paylaşıma açık olan anamaktaki bilgiyi kopyalayıp.

Kod: Tümünü seç

StrPCopy( tobuf, 'C:\KursKayıt\Yedek\'+Edit1.text+'_'+form2.QRY_OKULSABIT.fieldbyname('DONEMI').value); 
terminaldeki C:\KursKayıt\Yedek\ altına kopyasını üretirim diye düşünmüştüm
Cevapla