Bu kodda ne yanlış var? – 9

Geliştirmekte olduğumuz bir projede C:\ sürücüsünde bulunan OnemliDosya.xls dosyasını sıkışırmamız ve OnemliDosya.zip dosyasını oluşturmamız istendi.

Hemen arkasından sıkıştırdığımız dosyayı açmamız ve OnemliDosya.Yeni.xls dosyasını oluşturmamız bekleniyor.

Aşağıdaki method’ları bu görev için yazdık;

public static void Compress(string ZiplenecekDosyaAdi, string ZipDosyaAdi) { FileStream InputStream = File.Open(ZiplenecekDosyaAdi, FileMode.Open); FileStream OutputStream = File.Open(ZipDosyaAdi, FileMode.Create); GZipStream ZipStream = new GZipStream(OutputStream, CompressionMode.Compress);

try
{
    byte[] Buffer = new byte[InputStream.Length];
    InputStream.Read(Buffer, 0, Buffer.Length);
    ZipStream.Write(Buffer, 0, Buffer.Length);
}
finally
{
    OutputStream.Close();
    InputStream.Close();
} }

public static void Decompress(string ZiplenecekDosyaAdi, string ZipDosyaAdi) { FileStream Input = File.Open(ZiplenecekDosyaAdi, FileMode.Open); FileStream Output = File.Open(ZipDosyaAdi, FileMode.Create); GZipStream ZipStream = new GZipStream(Input, CompressionMode.Decompress);

try
{
    int Data = ZipStream.ReadByte();
    while (Data > 0)
    {
        Output.WriteByte((byte)Data);
        Data = ZipStream.ReadByte();
    }
}
finally
{
    Output.Close();
    Input.Close();
} }

Yazdığımız method’ları aşağıdaki gibi kullanıyoruz;

Compress(“C:\OnemliDosya.xls”, “C:\OnemliDosya.zip”); Decompress(“C:\OnemliDosya.zip”, “C:\OnemliDosya.Yeni.xls”);

Kodumuzdan emin olmamıza rağmen, çalışmadığını farkediyoruz.

Sizce problem nedir ve nasıl düzeltilebilir?

C# String Dizisini String Uzunluğuna Göre Sıralamak

Geliştirdiğimiz projelerde ekrana listeleyeceğimiz dizileri harf uzunluklarına göre sıralamak isteyebiliriz.

Bu makale ile, IEnumerable<string> tipinden değişkenlere bu özelliği nasıl ekleyeceğimizi göreceğiz.

Öncelikle Extension Method‘umuzu static bir sınıf içerisine (ExtensionManager) yazmamız lazım;

public static class ExtensionManager { public static IEnumerable<string> Sirala(this IEnumerable<string> Liste) { string[] strArray = Liste.ToArray<string>(); Array.Sort(strArray, new Comparison<string>(delegate(string Kelime1, string Kelime2) { if (Kelime1 == null && Kelime2 == null) { return 0; } else if (Kelime1 == null) { return -1; } else if (Kelime2 == null) { return 1; } else { if (Kelime1.Length < Kelime2.Length) return -1; else if (Kelime1.Length > Kelime2.Length) return 1; else return Kelime1.CompareTo(Kelime2); } }));

    return strArray;
} }</pre>

Yukarıdaki kod’da Array sınıfının static Sort method’unu çağırıyoruz. Karşılaştırma koşulunu, ikinci parametre’de delegate method olarak yazıyoruz.

Kullanımı;

var Rakamlar = new List<string> { "12", "1", null, "2314", "55555", "123", "222" };

foreach (var Rakam in Rakamlar.Sirala())
{
    Console.WriteLine(Rakam);
}

Sonuç;

[null]
1
12
123
222
2314
55555


C# Uygulamanın Yönetici (Administrator) hesabı ile çalıştığını kontrol etmek

Eğer uygulama içerisinde Yönetici (Administrator) hesabının yetkisi ile yapılabilecek görevlerimiz varsa, öncelikle bu haklara sahip olduğumuza emin olmamız gerekir.

Günümüzde birçok uygulama Yönetici (Administrator) haklarına ihtiyaç duyar. Bu makalede bu haklara sahip olduğumuzu nasıl kontrol edeceğimizi işleyeceğiz.

Öncelikle kodumuzun using kısmına System.Security.Principal namespace‘ini eklememiz gerekiyor;

using System.Security.Principal;

Daha sonra IsAdministrator() isminde bir fonksiyon yazıyoruz;

public static bool IsAdministrator()
{
    WindowsIdentity identity = WindowsIdentity.GetCurrent();

    WindowsPrincipal principal = new WindowsPrincipal(identity);

    return principal.IsInRole(WindowsBuiltInRole.Administrator);
}

Bu fonksiyon sayesinde Yönetici (Administrator) haklarına sahip olup/olmadığımızı anlayabiliyoruz.

Fonksiyon içerisinde öncelikle WindowsIdentity sınıfından bir değişkene WindowsIdentity sınıfının static GetCurrent() methodundan dönen değeri atıyoruz.

İkinci adımda ise, bu değişkeni kullanarak WindowsPrincipal sınıfından yeni bir değişken oluşturuyoruz.

Son adımda, bu değişkenin IsInRole fonksiyonuna WindowsBuiltInRole enum’ından Administrator değerini parametre olarak geçiyoruz ve sonucu fonksiyondan geriye boolean değer olarak döndürüyoruz.

Uygulama içerisinde her ihtiyacımız olduğunda yukarıdaki fonksiyonu çağırarak Yönetici (Administrator) haklarına sahip olduğumuzu kontrol edebiliriz;

bool AdminRole = Program.IsAdministrator();

Ağustos 2011 - Microsoft Yaz Okulu İstanbul Semineri

Her sene üniversitelerin yaz tatiline girmesiyle Microsoft tarafından bir Yaz Okulu oluşturuluyor.

Bu yıl ben de Microsoft Yaz Okuluna eğitmen olarak katıldım.

Üçüncü seminerimi İstanbul Microsoft Genel Merkezi‘nde XNA Oyun Programlama konusunda verdim.

İstanbul Yaz Okulu öğrencilerine, beni sabırla dinledikleri için teşekkür ediyor, özverili katılımlarından dolayı da tebrik ediyorum.

XNA Oyun Programlama Sunum Dosyası‘nı download edebilirsiniz.

C# MD5 yöntemi ile metin şifreleme

Aşağıdaki küçük fonksiyon yardımıyla string tipindeki değişkenlerin içeriğini MD5 yöntemi ile şifreleyebiliriz.

Öncelikle kodumuzun using kısmına System.Security.Cryptography namespace‘ini eklememiz lazım.

Böylece MD5CryptoServiceProvider sınıfından yeni bir örnek (instance) oluşturabilir, ve şifreleme sağlayıcısı (crypto service provider) olarak kullanabiliriz.

using System.Text; using System.Security.Cryptography;

public static string Sifrele(string Metin) { MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] ba = Encoding.UTF8.GetBytes(Metin);
ba = md5.ComputeHash(ba);

StringBuilder sb = new StringBuilder();
foreach (byte b in ba)
{
    sb.Append(b.ToString("x2").ToLower());
}

return sb.ToString(); }

Engin Polat hakkında

Senior Software Engineer, @Microsoft

Ada ve Ege'nin babası ;)

Kategoriler

İstatistik

Makale Adedi: 484

Creative Commons Lisansı