28 Nisan 2007

Intersystems Cache ile Ftp islemleri


Cache ftp işlemlerini gerçekleştirmek için dahili bir sınıfa sahiptir. Bu sınıf sayesinde ftp işlemleri kolayca gerçekleştirilir.

; Öncelikle bu sınıfa ait bir nesne oluşturuyorum
S ZFTP=##class(%Net.FtpSession).%New()

; time out suresini ayarliyorum
S ZFTP.Timeout=100

; baglantiyi sagliyorum
; parametreler : host,username,password,port (default 21)
S ZSTAT=ZFTP.Connect("192.60.60.60","ftpuser","ftppass",21)
I 'ZSTAT
S ZERR="Baglanamadi" Q

;Eger baglandiktan sonra dizin degistirmek istiyorsam
S ZSTAT=ZFTP.SetToParentDirectory() ; ana dizine gecer
S ZSTAT=ZFTP.SetDirectory("C:\FTPROOT\TEST") ; belirtilen dizine gecer
I 'ZSTAT S ZERR="Dizin degistirilemedi" Q

;Dizindeki dosyalarin listesini almak istiyorsam
; Burada ilk parametre olarak hangi dizindeki dosya listesi alinacagi verilmeli. Windows sorunsuz calisiyor ama , unix sistemlerinde bu gerekebiliyor. ZLIST array sinifina ait olarak hazir gelir. Onceden tanimlamaya gerek yok.
S ZSTAT=
ZFTP.NameList("",.ZLIST)
I 'ZSTAT S ZERR="Dosya listesi alinamadi" Q
S Z="" F S Z("FILE")=ZLIST.GetNext(.Z) Q:(Z="") W !,Z("FILE")

;Dizindeki dosya yada dosyalari kendi makinama cekmek icin
S ZSTREAM=##class(%Library.GlobalCharacterStream).%New()
S ZSTAT=ZFTP.Retrieve("karsidakidosyaadi.txt",ZSTREAM)
I 'ZSTAT S ZERR="Dosya acilamadi" Q
S ZFILE=##class(%Library.File).%New("C:\"_ZFILE)
D ZFILE.Open("WSN")
D ZFILE.CopyFrom(ZSTREAM)
D ZFILE.Close()
D ZSTREAM.%Close()

;Karsi taraftaki bir dosyayi silmek icin ;
D ZFTP.Delete("karsidakidosyaadi.txt")

;Oturumu kapatmak icin
D ZFTP.Logout()

Ftp icin kullanilan bu nesnenin tum metotlari boolean dondurur. Ben bu durumu ZSTAT degiskeni ile kontrol ediyorum ve hata mesajini kendim olusturuyorum. Fakat hatanin neden kaynaklandigini ogrenmek istiyorsam, ReturnMessage degerini kontrol edebilirim. Bu baglandigim hosttan donen mesaji verir. Hata mesajim su sekilde olabilirdi ;

S ZERR=ZFTP.ReturnMessage

Ftp icin onemli ozelliklerden biriside transfer tipidir. Iki farkli deger alabilir Ascii ve Binary. Text dosyalar transfer edilirken Ascii tipi onerilmektedir.
Mevcut transfer tipini ogrenmek icin ;

W ZFTP.Type

Ascii moda gecmek icin
S ZSTAT=ZFTP.Ascii
I 'ZSTAT S ZERR="Ascii moda gecilemedi"

Binary moda gecmek icin
S ZSTAT=ZFTP.Binary
I 'ZSTAT S ZERR="binary moda gecilemedi"

Oturum acildiktan sonra kullanici degistirilmek istenilebilir. Bu durumda
S ZSTAT=ZFTP.ChangeUser("yenikullanici","yenipass")

Ftp serverin durumunu ogrenmek icin ;
S ZSTAT=ZFTP.Status(.ZMSG)
I ZSTAT W ZMSG,!

Ftp server sistemi hakkinda bilgi almak icin;
S ZSTAT=ZFTP.System(.ZMSG)
I ZSTAT W ZMSG!,