FileSystem | Engin Polat\'ın Windows 8 , Windows Phone 8 ve C# içerikli programcılık sitesi

Arşiv

Etiketlenen yazılar FileSystem

C# ile Geçici Dosya (Temporary File) oluşturma sınıfı yazalım

13 July 2011 Yorum yapılmamış

Projelerimizde dosya sistemi üzerinde geçici olarak dosya oluşturma ve işimiz bittiğinde silme ihtiyacı hissedebiliriz.

Bu yazıyı okumadan önce Hem benzersiz hem de geçici dosya oluşturmanın en kolay yolu ve C# ile Geçici Dosya Oluşturmak başlıklı yazılarımı okumanızı öneririm.

Bu linkte bulduğum yöntemi çok kullanışlı buldum ve sizler (aynı zamanda kendim) için türkçeleştirdim;

public class TempFile : IDisposable
{
	public TempFile() : this(string.Empty)
	{ }

	private readonly string _tmpfile;

	public TempFile(string extension)
	{
		_tmpfile = Path.GetTempFileName();

		if (!string.IsNullOrEmpty(extension))
		{
			string newTmpFile = _tmpfile + extension;

			/// Yeni bir geçici dosya oluşturulur
			File.Create(newTmpFile, 0);
			/// Eski geçici dosya silinmediyse, silinir.
			File.Delete(_tmpfile);

			/// Yeni oluşturulan geçici dosya kullanıma hazır!
			_tmpfile = newTmpFile;
		}
	}

	public string FullPath
	{
		get { return _tmpfile; }
	}

	void IDisposable.Dispose()
	{
		if (!string.IsNullOrEmpty(_tmpfile) && File.Exists(_tmpfile))
		{
			File.Delete(_tmpfile);
		}
	}
}

Kullanımına örnek;

using(TempFile tmp = new TempFile(".dat")) /// dat uzantılı bir geçici dosya oluşturuluyor
{
	/// FullPath özelliğinden geçici dosyanın yolu ve dosya adı alınabilir;
	string filename = tmp.FullPath;
}

C# Windows tarzı dosya boyutu formatlayıcı

04 September 2010 1 yorum

Eğer uygulamalarınızda dosya sistemindeki dosyalar veya dizinler ile uğraşıyorsanız (listeleme, filtreleme, vs.) büyük ihtimalle dosya veya dizinlerin boyutlarını hespalayan bir yönteminiz vardır.

Genellikle (kolay olduğundan ötürü) byte cinsinden dosya boyutunu 1000’e (bin) böler kilobyte cinsinden veya 1.000.000’a (milyon) böler megabyte cinsinden karşılığını buluruz.

Fakat Windows işletim sisteminde dosya veya dizinlerin boyutları en yakın birime göre hesaplanır ve gösterilir.

Küçük dosyalar byte, kilobyte veya megabyte cinsinden gösterilirken, daha büyük dosyalar gigabyte hatta terabyte cinsinden gösterilebiliyor.

Eğer biz de uygulamamızda dosya boyutlarını Windows tarzında göstermek istiyorsak, öncelikle birimleri elde etmemize yarayacak bir enum tanımlamalıyız;

public enum Boyutlar
{
	byte,
	kilobyte,
	megabyte,
	gigabyte,
	terabyte,
	petabyte
}

Daha sonra, parametre olarak noktalı rakam alan, geriye string döndüren bir method tanımlamalıyız;

public static string FormatDosyaBoyutu(decimal DosyaBoyutu)
{
}

FormatDosyaBoyutu method’unda, önce Boyutlar enum‘ından bir örnek oluşturacağız ve byte değerini içermesini sağlayacağız;

Boyutlar BoyutTanim = Boyutlar.byte;

Daha sonra bir döngü aracılığıyla, DosyaBoyutu değişkeni 1000’e bölünebildiği sürece BoyutTanim değişkeninin bir üst birimi içermesini sağlayacağız;

while (Math.Round(DosyaBoyutu) >= 1000)
{
	DosyaBoyutu /= 1024;
	BoyutTanim++;
}

Son olarak, method’dan geriye DosyaBoyutu değişkenin virgülden sonra 2 hane içeren ve doğru birimi gösteren değeri döndürmesini sağlayacağız;

return string.Format("{0}\t{1}", DosyaBoyutu.ToString("f2"), BoyutTanim);

Dosya Boyutu Formatlayıcı

Örnek kodun tamamı;

using System;
using System.Text;

namespace DosyaBoyutuFormatlayici
{
	class Program
	{
		public enum Boyutlar
		{
			byte,
			kilobyte,
			megabyte,
			gigabyte,
			terabyte,
			petabyte
		}

		public static void Main(string[] args)
		{
			Console.WriteLine(FormatDosyaBoyutu(0));
			Console.WriteLine(FormatDosyaBoyutu(10));
			Console.WriteLine(FormatDosyaBoyutu(200));
			Console.WriteLine(FormatDosyaBoyutu(3000));
			Console.WriteLine(FormatDosyaBoyutu(40000));
			Console.WriteLine(FormatDosyaBoyutu(500000));
			Console.WriteLine(FormatDosyaBoyutu(6000000));
			Console.WriteLine(FormatDosyaBoyutu(70000000));
			Console.WriteLine(FormatDosyaBoyutu(800000000));
			Console.WriteLine(FormatDosyaBoyutu(9000000000));
			Console.WriteLine(FormatDosyaBoyutu(10000000000));
			Console.WriteLine(FormatDosyaBoyutu(200000000000));
			Console.WriteLine(FormatDosyaBoyutu(3000000000000));
			Console.WriteLine(FormatDosyaBoyutu(40000000000000));
			Console.WriteLine(FormatDosyaBoyutu(500000000000000));
			Console.WriteLine(FormatDosyaBoyutu(6000000000000000));
			Console.WriteLine(FormatDosyaBoyutu(70000000000000000));
			Console.WriteLine(FormatDosyaBoyutu(800000000000000000));
			Console.WriteLine(FormatDosyaBoyutu(9000000000000000000));
			Console.WriteLine(FormatDosyaBoyutu(10000000000000000000));

			Console.ReadLine();
		}

		public static string FormatDosyaBoyutu(decimal DosyaBoyutu)
		{
			Boyutlar BoyutTanim = Boyutlar.byte;

			while (Math.Round(DosyaBoyutu) >= 1000)
			{
				DosyaBoyutu /= 1024;
				BoyutTanim++;
			}

			return string.Format("{0}\t{1}", DosyaBoyutu.ToString("f2"), BoyutTanim);
		}
	}
}

C# Textbox’ın AutoComplete Özelliği

23 August 2010 4 yorum

Genellikle web uygulamalarında gördüğümüz metin kutularının otomatik tamamlama özelliğini Windows Masaüstü uygulamalarımıza da ekleyebiliriz.

Yapmamız gereken, otomatik tamamlama özelliği vermek istediğimiz Textbox‘ın birkaç özelliğini ayarlamak;

AutoCompleteMode :
Varsayılan olarak None değerini içerir
Append, yazılan harflere uyan ilk kelimenin kalanını textbox’a ekler ve seçili hale getirir
Suggest, aşağı açılan listeyi gösterir
SuggestAppend, hem aşağı açılan listeyi gösterir, hem de yazılan harflere uyan ilk kelimenin kalanını textbox’a ekler ve seçili hale getirir

AutoCompleteSource :
Varsayılan olarak None değerini içerir
FileSystem, FileSystemDirectories, HistoryList, RecentlyUsedList, AllSystemSources, AllUrl, CustomSource değerlerinden birini içerebilir

AutoCompleteCustomSource :
AutoCompleteSource özelliği CustomSource olarak atanmışsa AutoCompleteCustomSource özelliği string dizisi olarak listeyi tutar

Önce aşağıdaki ekran görüntüsünde form oluşturalım;

TextBox AutoCompleteMode Form

Öncelikle formumuzun yüklenme olayında (Form_Load Event) Kaynak açılır listesine (ComboBox), otomatik tamamlama kaynaklarının listesini ekleyelim;

cmbKaynak.Items.Add(AutoCompleteSource.CustomSource);
cmbKaynak.Items.Add(AutoCompleteSource.FileSystem);
cmbKaynak.Items.Add(AutoCompleteSource.FileSystemDirectories);
cmbKaynak.Items.Add(AutoCompleteSource.HistoryList);
cmbKaynak.Items.Add(AutoCompleteSource.RecentlyUsedList);
cmbKaynak.Items.Add(AutoCompleteSource.AllSystemSources);
cmbKaynak.Items.Add(AutoCompleteSource.AllUrl);

TextBox AutoCompleteSource List

Daha sonra, TextBox‘ın AutoCompleteMode ve AutoCompleteCustomSource özelliklerine değer atamaları yapalım;

txtWebSitesi.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
txtWebSitesi.AutoCompleteCustomSource.AddRange(new string[] { "http://www.enginpolat.com", "http://www.karalamalar.net", "http://www.cebirci.com", "http://www.kadirgunay.com" });
cmbKaynak.SelectedIndex = 0;

Son olarak, Kaynak combobox‘ının seçili eleman değişti olayında (SelectedIndexChanged Event) textbox‘ın AutoCompleteSource özelliğini değiştiriyoruz;

txtWebSitesi.AutoCompleteSource = (AutoCompleteSource)cmbKaynak.SelectedItem;

TextBox AutoCompleteCustomSource

TextBox AutoCompleteSource FileSystem

TextBox AutoCompleteSource History List

Örnek uygulamanın tüm kaynak kodu;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

public partial class frmMain : Form
{
	public frmMain()
	{
		InitializeComponent();
	}

	private void frmMain_Load(object sender, EventArgs e)
	{
		cmbKaynak.Items.Add(AutoCompleteSource.CustomSource);
		cmbKaynak.Items.Add(AutoCompleteSource.FileSystem);
		cmbKaynak.Items.Add(AutoCompleteSource.FileSystemDirectories);
		cmbKaynak.Items.Add(AutoCompleteSource.HistoryList);
		cmbKaynak.Items.Add(AutoCompleteSource.RecentlyUsedList);
		cmbKaynak.Items.Add(AutoCompleteSource.AllSystemSources);
		cmbKaynak.Items.Add(AutoCompleteSource.AllUrl);

		txtWebSitesi.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
		txtWebSitesi.AutoCompleteCustomSource.AddRange(new string[] { "http://www.enginpolat.com", "http://www.durgut.com", "http://www.karalamalar.net", "http://www.kadirgunay.com", "http://www.microsoft.com", "http://www.bilgeadam.com", "http://www.ntvmsnbc.com", "http://www.arcelik.com" });

		cmbKaynak.SelectedIndex = 0;
	}

	private void cmbKaynak_SelectedIndexChanged(object sender, EventArgs e)
	{
		txtWebSitesi.AutoCompleteSource = (AutoCompleteSource)cmbKaynak.SelectedItem;
	}

	private void lblenginpolatcom_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
	{
		Process.Start("http://www.enginpolat.com");
	}
}