22 Ağustos 2014 Cuma

C# System Compression - Dosya sıkıştırma

Merhaba Arkadaşlar bugun .NET Framework ' un System Compression konusunu anlatıcam bazen verilerimizi sıkıştırmak ve istediğimiz formatta yazmak isteyebiliriz. herhan psikopatlığımız tutabilir peki ne yapmamız gerekir sıkıştırma ve mantığı nedir bi bakalım..
Sıkıştırmanın aslında kafamızı okadar yorucak bir olayı yok en basitinden düşünürsek "ANKARA" kelimesini ele alalım.. biri şunu bi sıkıştır bakayım derse naparsınız bi düşünelim.. ben olsam.. tekrar eden harfleri sadece 1 kez yazmak isterdim yani ben "A" harfini başa bi yazıyım diğer "A" harflerinin nerde hangi adresde olduğunuda bi kenara iliştiri verirdim tekrar gün ışığına çıkartmak istediğimde o adreslere bakarak "A" harfini nerden aldığıma bakıp tekrar yerine yerleştirirdim bu algoritmayla sıkıştırma işlemi yaparsak sonuç olarak bize "ANKR" sonucu dönecektir neredeyse yarı yarıya işe yaradı ozaman.. tabi bu işin sadece mantık yönüydü winrar.. winzip gibi sıkıştırma programlarının kullandıkları algoritmalar emin olun çok daha karmaşık ve içinden çıkılmaz bir algoritmaya sahip oldukları aşikar.. hadi geçelim biz kendi yağımızda kendimize yetecek kadar sıkıştırma işlemlerine bir bir..
Bu iş için "System.IO.Compression" Kütüphanesini kullanıcaz.. o yüzden bunu Usinglere eklememiz gerekli.. sıkıldım kodlara geçelim..
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.IO.Compression;

namespace SistemCompression
{
    public partial class Form1 : Form
     {
        public Form1()
        {
            InitializeComponent();
        }

        FileStream fsZiplenecek;
        public void Ziple(string dosyayolu)
        {
            //1-nereye kaydedilecek
            FileStream fsKaydedilecek = new FileStream("C:\ziplenmis.zippy",FileMode.OpenOrCreate, FileAccess.Write);
            //2- kim sıkıstırılacak
            fsZiplenecek = new FileStream(dosyayolu, FileMode.OpenOrCreate,FileAccess.Read);
            //3- sıkıstırılacak dosya byte[] sine cevrilmelidir.
            byte[] dosyaIcerik = new byte[fsZiplenecek.Length];
            fsZiplenecek.Read(dosyaIcerik, 0, dosyaIcerik.Length);
            //4- kim sıkıstırma eylemini gerceklestirecek.nesneyi belirken hangi amacla ulastıgınızıda soyleyin..
            DeflateStream ds = new DeflateStream(fsKaydedilecek,CompressionMode.Compress);
            ds.Write(dosyaIcerik, 0, dosyaIcerik.Length);
            ds.Close();
        }

        public void Cozumle(string CozulecekDosya)
        {
            //hangi dosya cozulecek
            FileStream fsCozulecek = new FileStream(CozulecekDosya,FileMode.OpenOrCreate, FileAccess.Read);
            //kim cozecek
            DeflateStream ds = new DeflateStream(fsCozulecek,CompressionMode.Decompress);
            //deflate stream bilgiyi nereye cozecek
            byte[] cozulmus = new byte[fsZiplenecek.Length];
            ds.Read(cozulmus, 0, cozulmus.Length);

            //artık sıkıstırılmıs dosyamız cozuldu ancak byte[] olarak duruyor.
            FileStream fsCozulmus = new FileStream("C:\cozulmus.txt",FileMode.OpenOrCreate);
            fsCozulmus.Write(cozulmus, 0, cozulmus.Length);

            fsCozulmus.Close(); ds.Close(); fsZiplenecek.Close();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
             Ziple("C:\deneme.txt");
            this.Text = "basarılı";
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Cozumle("C:\ziplenmis.zippy");
            this.Text = "basarılı";
        }
     }
}

Windows Form Uygulamalarını IIS ile Nasıl Publish Edebiliriz

Windows Form Uygulamalarını IIS ile Nasıl Publish Edebiliriz.

Arkadaşlar merhaba, bu makalemiz Windows form uygulamalarımızı iis yardımıyla publish etme ve publish ettiğimiz uygulamalarda versiyon numarası sayesinde update yapabilme ile ilgili olacaktır.
Öncelikle hazırladığımız Windows form uygulamamamızı publish edebilmemiz için bilgisayarımızda IIS(Internet Information Service) programının yüklü olması gerekmektedir. Bu programı (Denetim Masası>Programlar ve Özellikler>Windows Özelliklerini Aç veya Kapat (Windows 7 için)) menüsünden kurabilirisiniz.
IIS programını kurduktan sonra oluşturduğumuz form uygulamasının üzerine sağ tıklayarak publish seçeneğini seçmemiz gerekmektedir.

Ardından, "publish uygulamasını nereye çıkartmamız gerektiği" sorulacak. Tahmin edebileceğimiz üzere publish olayı için sistemin publish sayfası gibi bazı dosyalar hazırlaması gerekmekte. Biz bu dosyaları örnek olarak kendi localhost' umuz da yayınlayacağız. Bunun için browse seçeneğini seçerek, "default web site" dizinine yeni bir uygulama oluşturuyoruz.

Bu uygulama buraya oluşturduğu zaman iis' in "C:" sürücümüz altında bulunan "inetpub>>wwwroot" dizinine uygulamaya verdiğimiz isimle bir klasör açtığını göreceğiz.

IIS te oluşturduğumuz (Resim - 2 ) bu uygulama seçilerek aç butonuna tıklıyoruz. Uygulamamızın online kullanımını isteme ihtimaline karşılık "Yes, this application is avaliable online or offline" seçeneğini işaretleyerek "next" diyoruz ve "finish" butonuyla publish işlemini tamamlamış oluyoruz. Karşımıza gelen Explorer penceresinin adres satırına bakarsak http://localhost/yazılımmutfagi/publish.htm adresinde uygulamamızın download sayfasını göreceksiniz.

Update olayı içinse yine projemizin properties ksımına gelerek publish özelliğini seçiyoruz.
Karşımız "Install Mode Settings" başlığı altında "application files, prerequsistes, updates, options" seçenekleri gelecektir. Bu seçeneklerden update olayı ilgili diğer ayarlamaları yapabilmektesiniz. Burada "automatically increment revision with each publish" seçeneği yaptğımız her uygulamada uygulamamızın versiyon numarasını birer birer otomatik olarak artmasını sağlar. Biz update seçeneğine tıklıyoruz.


Yukarıdaki Resimdede görüldüğü gibi siyah olarak işaretlenmiş yer uygulamamızın update edilebilecek en küçük versiyonunu gösterir. Kırmızı olan yer ise uygulamamızın güncelleme yapabilmesi için yeni dosyaları nereden alacağını gösterir. Biz burada IIS üzerinde oluşturduğumuz uygulamamızı seçiyoruz. Bu değişiklikleri yaptıktan sonra tekrar publish ekranına (Resim -5) geliyoruz ve "Publish Now" butonuna tıklıyoruz. Daha önceden bilgisayarımıza ilk kurduğumuz uygulamamızın başlat menüsünde ki kısayoluna tıkladığımız zaman bize yeni bir güncelleme olduğunuz soracağını göreceğiz.

Windows Form Uygulamalarında Excel Kullanımı

Öncelikle projemize sağ tıklayarak "add reference" seçeneğindeki bulunan "Microsoft Office 12.0 Object Libary" dll' sini ekliyoruz (bu .dll dosyası bilgisayarımızda bulunan Office sürümüne göre 11.0 olabilir). Ardından name space olarak"System.Globalization (yapacağımız dil ayarları için) ve Microsoft.office.Interop.Excel " eklememiz gerekmekte.
İlk olarak eklediğimiz "globalization" özelliği ile alakalı olarak dil kodlamasını yapmamız lazım bunu ;
System.Globalization.CultureInfo dil = System.Threading.Thread.CurrentThread.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentCulture=new System.Globalization.CultureInfo("en-us");
Şeklinde kullanacağımız kodlanmayı "dil" değişkenine atayarak yapıyoruz. Şimdi Excel dosyamızı oluşturmaya başlayalım;
Microsoft.Office.Interop.Excel.Application tablo = new Microsoft.Office.Interop.Excel.Application();
Aşağıdaki Kod satırı ile tablomuzu oluşturuyoruz.
Microsoft.Office.Interop.Excel.Workbook kitap = tablo.Workbooks.Add("C:\\yazilimmutfagi.xls");
Aşağıdaki kod satırı ile oluşturduğumuz Excel kitabımızı oluşturuyoruz.
Microsoft.Office.Interop.Excel.Worksheet sayfa = (Microsoft.Office.Interop.Excel.Worksheet)tablo.ActiveSheet;
Kod satırı ile de oluşturduğumuz Excel kitabının aktif (başlangıç da denebilir) sayfasını Sayfa 1 olarak belirliyoruz.
Şimdi oluşturduğumuz dil değişkenini kullanma vakti geldi.
System.Threading.Thread.CurrentThread.CurrentCulture = dil;
tablo.Visible = true;
sayfa = (Worksheet)kitap.ActiveSheet;
burada ki "sayfa" üzerine metin veya veri ekleyeceğimiz Excel sayfasıdır. Örnek olarak Excel mantığına göre ilk hücre (cell) A-1 dir. Biz bunu [1,1] olarak gösteriyoruz.
Yani; Sayfa.Cells[1,1]="deneme"; kodunda A-1 hücresine "deneme" metni gider.
Excel uygulamaları bu şeklide word için yakın zamanda başka bir makalede görüşmek dileğiyle.

Windows Form Uygulamalarında Klavye Yönetimi - Tuşların idle kontrolü

Merhaba arkadaşlar;
Bu makalemizde c# programlama dilini kullanarak tuş kontrollerinden bahsedeceğiz. Aslında çok elzem bir bilgi olarak görünmeyebilir fakat bazı durumlarda gerçekten hayat kurtarıcı olabilmekte. Öncelikle projemize "user32.dll" dosyasını import ederek başlayacağız. Global alan olarak tanımladığımız yerde,
[DllImport("user32.dll")]
extern static int GetKeyState(int key);
kodlarıyla fonksiyonu modüle deklare etme işlemini tamamlayarak dll dosyamızı import ediyoruz.(Bu arada name space kısmına ekleme yapmak için DllImport yazdıktan sonra "Alt+Shift+F10" tuşlarına basarak name space kısmına daha kolay yolda ekleme yapabilirsiniz…)
Örnek olarak klavyemizin CapsLock ve Numlock tuşlarının devrede olup olmadığını kontrol edelim. Bunun için;
private void timer1_Tick(object sender, EventArgs e)
{
    if (GetKeyState((int)Keys.CapsLock) == 1)
    {
        lblcaps.BackColor = Color.Green;
    }
    else
    {
        lblcaps.BackColor = Color.Gray;
    }

}

private void timer2_Tick(object sender, EventArgs e)
{
    if (GetKeyState((int)Keys.NumLock)==1)
    {
        lblnum.BackColor = Color.Green;
    }
    else
    {
        lblnum.BackColor = Color.Gray;
    }
}
Dikkatinizi çektiği üzere kodları timer nesnelerinin tick olayları içine yazdık. Sebebi ise kontrolün devamlılığını sağlamaktır. Bu şekilde klavyemizde bulunan tuşların hemen hemen hepsiyle alakalı ayarlamalar yapabiliriz.

C# Nullable Types

 bir c# 2.0 yeniliği olan nullable typeslardan bahsetmek istiyorum..
Veritabanı işlemlerinde çoğu zaman sıkıntı yaratan, değer tipleri (int, bool, ..) için "null" değer gönderememe hikayesini çözen bir yenilik. artık bir değer tipi (value type), hiç bir değer atanmamış (undefined) bir durumda kalabiliyor. eskiden bir ilkel tipimizin illa bir değeri olması gerekiyordu. vermeseniz de ön tanımlı değerini alıyordu.

nullable : varsayılan olarak value type degiskenleri null gecemezsiniz. aldıgınız hatada bu acıkca belirtilir.
ancak yapılan bazı işlemlerde deger yakalama sırasında gelen deger eger null ise projelerimiz patlayabilir. bunu engellemek null gelen deger varsa yerine varsayılan bir degisken atayabilmek için bu tip kullanılır..

"nullable" bir tipi şöyle tanımlıyoruz:

string kelime = null;
int sayim = null;
int? sayim = null;


Bir nullable type değişkeninin değer içerip içermediğini şöyle anlayabiliriz:
if (x.hasvalue)" veya "if (x!=null)" denilerek değer içerip içermediği denetlenebilir.

int? a = null;
object b = a;
return b==null;

satirlarindan true degerini dondurecek reference type taklidi yapabilen strong valued tiptir.

Şöyle bir kullanımda var..

int? a = null;
int defaultval = 10;
console.writeline("anın değeri: " + (a ?? defaultval));
diyelimki "a" değişkenine veritabanından değer gelmedi.. "a" haliyle null kaldı
bunun yerine a ?? yani harbiden null ise defautval değişkeninin değerini göster demek oluyor..
bir nevi bir patlama gerçekleşmemesi için kod sigortası..

tabi bunu şöylede yapabilirdik..

getvalueordefault() methodu degiskenin uzerinde deger varsa onu al yoksa varsayılan atamam yap..
int ugurlusayi = gelenID.GetValueOrDefault(5);

Buda generic hali:
Nullable gelenID = new Nullable();

Ayrıca DBNull.Value diye birşey vardırki bu parametre ile db den gelen nesnenin null olup olmadığını
kontrol etme amacı ile kullanılır.
if(DBNull.Value!= datarow["alanadi"])
gibisinden..

C# - Uzak Masaüstü

C# ile Uzak Masaüstü Yapımı
Fw 4.0’ da uzak masaüstü bağlantı uygulamaları geliştirmek artık çok kolay. Yapmamız gerek sadece referans ekleyip, toolbox içerisine uzak masaüstü objesini eklemek. Örnek verecek olursak;
-Projemizin referans ekleme alanında (add referance) "COM Components" başlığı altında Micorosft Terminal Service Active Client 1.0 Type Libary referansını ekliyoruz. Bu işlemden sonra toolbox alanına sağ tıklayarak “choose item” başlığını seçiyoruz.
-Buradan Microsoft Terminal Services Client Control Version-1 objesini toolbox alanına ekliyoruz. Sonra Toolbox da Buradan Microsoft Terminal Services Client Control Version-1 objesine projemize sürükleyip bırakıyoruz. Bu yapıyı oluşturduktan sonra projemize üç textbox, ve iki buton ekleyelim.
?
1
2
3
4
5
6
7
8
9
private void button1_Click(object sender, EventArgs e)
        {
            axMsTscAxNotSafeForScripting1.Server = txtUzakIp.Text;
            axMsTscAxNotSafeForScripting1.UserName = txtoturumAdi.Text;
            IMsTscNonScriptable secured =
(IMsTscNonScriptable)axMsTscAxNotSafeForScripting1.GetOcx();
            secured.ClearTextPassword = txtSifre.Text;
            axMsTscAxNotSafeForScripting1.Connect();
        }
Şeklinde bağlanmamız için gerekli olan kodları yazıyoruz. Eklediğimiz Microsoft Terminal Services Client Control Version-1 objesinin olaylarına (event) baktığımız zaman disconnect, tam ekran geçiş, bağlanma - bağlanmama kontrolü gibi bir çok olayın üzerinde çalışılabileceğini göreceksiniz.