C#.Net ile Windows Explorer

Yağız Gönüler tarafından yayınlanmıştır 13. Ağustos 2008 12:25

Bu uygulamamızda kullanacağımız namespaceler:

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

using System.IO;

using System.Management;

using System.Globalization;

 

Ayrıca splitter, mainmenu, menuitem, treeview, listview, ve imagelist gibi kontroller de kullanacağız. Farklı ve çok yararlı bir makale olacağına inanıyorum.

 

Öncelikle aşağıdaki görüntüyü oluşturmanız gerekiyor.

 

 

My Computer’ın yazdığı kısımdaki resimleri image liste atarak çağırıyoruz. Bu tip resimleri Windows’un kendi sistem dosyalarından bulabileceğiniz gibi arama motorlarından da faydalanabilirsiniz.

 

Şimdi ise kodlarımıza gelelim. Kodlar uzun olduğundan dolayı iyi takip etmeniz ve anlayabilmeniz gerekmektedir. Açıkçası ben zor bir noktası olduğunu sanmıyorum. Zira her kodun açıklaması satır aralarında mutlaka yer alacaktır. Ancak her türlü durumda mail atarak benden yardım alabilirsiniz. Şimdi kod bölümünüze geçelim:

 

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

using System.IO;

using System.Management;

using System.Globalization;

 

 

namespace My_Explorer

{

public class Explorer : System.Windows.Forms.Form

{

private System.Windows.Forms.Splitter splitter1;

private System.Windows.Forms.MainMenu mainMenu1;

private System.Windows.Forms.MenuItem menuItem1;

private System.Windows.Forms.MenuItem menuItem2;

private System.Windows.Forms.MenuItem menuItem3;

private System.Windows.Forms.MenuItem menuItem4;

private System.Windows.Forms.TreeView tvFolders;

private System.Windows.Forms.ListView lvFiles;

private System.Windows.Forms.ImageList m_imageListTreeView;

private System.ComponentModel.IContainer components;

 

public Explorer()

{

InitializeComponent();

PopulateDriveList();

}

 

protected override void Dispose( bool disposing )

{

if( disposing )

{

if (components != null)

{

components.Dispose();

}

}

base.Dispose( disposing );

}

 

 

[STAThread]

static void Main()

{

Application.Run(new Explorer());

}

 

//Bu prosedürde treeviewin içeriğini listeliyoruz

private void PopulateDriveList()

{

TreeNode nodeTreeNode;

int imageIndex = 0;

int selectIndex = 0;

 

const int Removable = 2;

const int LocalDisk = 3;

const int Network = 4;

const int CD = 5;

this.Cursor = Cursors.WaitCursor;

// TreeView’i temizliyoruz

tvFolders.Nodes.Clear();

nodeTreeNode = new TreeNode("My Computer",0,0);

tvFolders.Nodes.Add(nodeTreeNode);

 

//Nod koleksiyonunu tanımlıyoruz

TreeNodeCollection nodeCollection = nodeTreeNode.Nodes;

 

//Ve şimdi sürücü listemizi oluşturuyoruz

ManagementObjectCollection queryCollection = getDrives();

foreach ( ManagementObject mo in queryCollection)

{

 

switch (int.Parse( mo["DriveType"].ToString()))

{

case Removable: //removable drives

imageIndex = 5;

selectIndex = 5;

break;

case LocalDisk: //Local drives

imageIndex = 6;

selectIndex = 6;

break;

case CD: //CD rom drives

imageIndex = 7;

selectIndex = 7;

break;

case Network: //Network drives

imageIndex = 8;

selectIndex = 8;

break;

default: //defalut to folder

imageIndex = 2;

selectIndex = 3;

break;

}

//Yeni bir sürücü nodu oluşturuyoruz

nodeTreeNode = new TreeNode(mo["Name"].ToString() + "\\" ,imageIndex,selectIndex);

 

//Yeni bir nod tanımlıyoruz

nodeCollection.Add(nodeTreeNode);

}

//Nodlarda çeşitli başlıklar simgelenecektir
//Buna en güzel örnek program files.
//Örnegin program files tiklandiktan sonra soldaki listview’e
//Program filesin tüm icerigi gelecektir

InitListView();

 

this.Cursor = Cursors.Default;

}

 

private void tvFolders_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)

{

//Hangi dosya secildiyse

//O dosyanin icerigini gerekli yere listeliyoruz

this.Cursor = Cursors.WaitCursor;

 

//Seçilen dosya yada sürücüyü listeliyoruz

TreeNode nodeCurrent = e.Node;

 

//Tüm alt dosyaları temizliyoruz

nodeCurrent.Nodes.Clear();

 

if (nodeCurrent.SelectedImageIndex == 0)

{

//Bilgisayarım secildikten sonra

//Daha önce yazdigimiz prosedürün calismasini saglayip

//Sürücü ve dosyaların gelmesini saglıyoruz

PopulateDriveList();

}

else

{

//Burada ise alt dosyaların görüntülenmesini saglıyoruz

PopulateDirectory(nodeCurrent, nodeCurrent.Nodes);

}

this.Cursor = Cursors.Default;

}

 

protected void InitListView()

{

//Listviewin icerigini temizliyoruz

lvFiles.Clear();

//Listview’in kolon baslıklarını tanımlıyoruz

lvFiles.Columns.Add("Name",150,System.Windows.Forms.HorizontalAlignment.Left);

lvFiles.Columns.Add("Size",75, System.Windows.Forms.HorizontalAlignment.Right);

lvFiles.Columns.Add("Created", 140, System.Windows.Forms.HorizontalAlignment.Left);

lvFiles.Columns.Add("Modified", 140, System.Windows.Forms.HorizontalAlignment.Left);

}

 

protected void PopulateDirectory(TreeNode nodeCurrent, TreeNodeCollection nodeCurrentCollection)

{

TreeNode nodeDir;

int imageIndex = 2;

int selectIndex = 3;

 

if (nodeCurrent.SelectedImageIndex != 0)

{

//treeviewlere klasörler yerlestiriliyor

try

{

//dosya yolları kontrol ediliyor

if(Directory.Exists(getFullPath(nodeCurrent.FullPath)) == false)

{

MessageBox.Show("Directory or path " + nodeCurrent.ToString() + " does not exist.");

}

else

{

//dosyalar yerlestiriliyor

PopulateFiles(nodeCurrent);

 

string[] stringDirectories = Directory.GetDirectories(getFullPath(nodeCurrent.FullPath));

string stringFullPath = "";

string stringPathName = "";

 

//yolların adresleri atanıyor

foreach (string stringDir in stringDirectories)

{

stringFullPath = stringDir;

stringPathName = GetPathName(stringFullPath);

 

//adresler icin yeni nodlar olusturuluyor

nodeDir = new TreeNode(stringPathName.ToString(),imageIndex,selectIndex);

nodeCurrentCollection.Add(nodeDir);

}

}

}

catch (IOException e)

{

MessageBox.Show("Error: Drive not ready or directory does not exist.");

}

catch (UnauthorizedAccessException e)

{

MessageBox.Show("Error: Drive or directory access denided.");

}

catch (Exception e)

{

MessageBox.Show("Error: " + e);

}

}

}

 

protected string GetPathName(string stringPath)

{

//klasör isimleri getiriliyor

string[] stringSplit = stringPath.Split('\\');

int _maxIndex = stringSplit.Length;

return stringSplit[_maxIndex-1];

}

 

protected void PopulateFiles(TreeNode nodeCurrent)

{

//dosyalar treeviewe baglaniyor

string[] lvData = new string[4];

 

//liste temizleniyor

InitListView();

 

if (nodeCurrent.SelectedImageIndex != 0)

{

//dosya yollari tekrar kontrol ediliyor

if(Directory.Exists((string) getFullPath(nodeCurrent.FullPath)) == false)

{

MessageBox.Show("Directory or path " + nodeCurrent.ToString() + " does not exist.");

}

else

{

try

{

string[] stringFiles = Directory.GetFiles(getFullPath(nodeCurrent.FullPath));

string stringFileName = "";

DateTime dtCreateDate, dtModifyDate;

Int64 lFileSize = 0;

 

//tüm dosyalar baglanıyor

foreach (string stringFile in stringFiles)

{

stringFileName = stringFile;

FileInfo objFileSize = new FileInfo(stringFileName);

lFileSize = objFileSize.Length;

dtCreateDate = objFileSize.CreationTime;

dtModifyDate = objFileSize.LastWriteTime;

 

//listviewedeki tüm veriler olusturuluyor

lvData[0] = GetPathName(stringFileName);

lvData[1] = formatSize(lFileSize);

 

//dosyalar son kaydedilme yerlerine göre olusturuluyor

if (TimeZone.CurrentTimeZone.IsDaylightSavingTime(dtCreateDate) == false)

{

//dosyaları son haliyle olusturuluyor

lvData[2] = formatDate(dtCreateDate.AddHours(1));

}

else

{

// dosyalar son kaydedilme yerlerine göre olusturuluyor

lvData[2] = formatDate(dtCreateDate);

}

 

//dosyaların en son ne zaman olusturulduguna bakılıyor

if (TimeZone.CurrentTimeZone.IsDaylightSavingTime(dtModifyDate) == false)

{

dosyalar son kaydedilme yerlerine göre olusturuluyor

lvData[3] = formatDate(dtModifyDate.AddHours(1));

}

else

{

// dosyalar son kaydedilme yerlerine göre olusturuluyor

lvData[3] = formatDate(dtModifyDate);

}

//gercek dosya yolları olusturuluyor

ListViewItem lvItem = new ListViewItem(lvData,0);

lvFiles.Items.Add(lvItem);

}

}

catch (IOException e)

{

MessageBox.Show("Error: Drive not ready or directory does not exist.");

}

catch (UnauthorizedAccessException e)

{

MessageBox.Show("Error: Drive or directory access denided.");

}

catch (Exception e)

{

MessageBox.Show("Error: " + e);

}

}

}

}

 

protected string getFullPath(string stringPath)

{

//tüm dosya yolları belirleniyor

string stringParse = "";

//bilgisayarımın yolu siliniyor

stringParse = stringPath.Replace("My Computer\\", "");

 

return stringParse;

}

 

protected ManagementObjectCollection getDrives()

{

//tüm sürücüler belirleniyor

ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * From Win32_LogicalDisk ");

ManagementObjectCollection queryCollection = query.Get();

return queryCollection;

}

 

protected string formatDate(DateTime dtDate)

{

//kucuk formatta tarih belirleniyor

string stringDate = "";

 

stringDate = dtDate.ToShortDateString().ToString() + " " + dtDate.ToShortTimeString().ToString();

 

return stringDate;

}

 

protected string formatSize(Int64 lSize)

{

//format numarasi 0 kb olarak belirleniyor

string stringSize = "";

NumberFormatInfo myNfi = new NumberFormatInfo();

 

Int64 lKBSize = 0;

 

if (lSize < 1024 )

{

if (lSize == 0)

{

//0 byte

stringSize = "0";

}

else

{

//1 kb’den daha az

stringSize = "1";

}

}

else

{

// KB’ye cevriliyor

lKBSize = lSize / 1024;

//format numaralari default ayarlarina ceviriliyor

stringSize = lKBSize.ToString("n",myNfi);

//decimallar siliniyor

stringSize = stringSize.Replace(".00", "");

}

return stringSize + " KB";

 

}

 

private void menuItem2_Click(object sender, System.EventArgs e)

{

//uygulamadan cikiliyor

this.Close();

}

}

}

 

 

Tüm kodlarımız açıklamalarıyla birlikte bu şekilde oluşturuluyor. Eğer iyi takip ettiyseniz çalıştırdıktan sonra oluşması gereken görüntü şu şekilde olmalı:

 

 

İşe yarar, c#.net konusunda pratik dünyamızı genişleten ve geliştiren bir makale olduğuna inanıyorum. Farklı makalelerde tekrar görüşmek üzere.

Kaynak: Code Project

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler:

Articles | Software | Windows

Yorum ekle


(Gravatar simgesini gösterecek)  

  Country flag

biuquote
  • Yorum
  • Canlı önizleme
Loading





Bu site BlogEngine.NET 1.4.5.0 ile oluşturulmuştur. Türkçe çevirisi BlogEngine TR ekibi tarafından yapılmıştır.
Sitedeki kod ve tasarım değişiklikleri ise Yağız Gönüler tarafından geliştirilmiştir.
2008 © www.yagizgonuler.com

Şifahen değil acilen!

Anket

Yazılım geliştirirken en keyif aldığınız alan hangisi?




Sonuçlar

Son Yorumlar

Comment RSS

Calendar

<<  Ocak 2009  >>
PaSaÇaPeCuCuPa
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

Yazıları geniş takvimde göster

Ne Dinliyorum?

Kirpi - TearDrop (8 saat önce)
Kirpi - My Name Is Kirpi (8 saat önce)
Kirpi - The Song (8 saat önce)
Kirpi - Spell (8 saat önce)
Huseyin Karadayi - Bonus Track Funk Clarinet (String Mix) (8 saat önce)
Huseyin Karadayi - Sacred Gate (8 saat önce)
Huseyin Karadayi - Exotica (8 saat önce)
Huseyin Karadayi - Take Me Away / No Time To Waste (Vocal By Melis Sökmen) (9 saat önce)
Huseyin Karadayi - Eyes Don't Lie (Duet By Enoi & Funky C) (9 saat önce)
Huseyin Karadayi - This Way (Usy Groove) (9 saat önce)

Ne Okuyorum?


Haftanın Sözü


"Sukûnetim asaletimdendir;
Lâkin her lâfa verilecek bir cevabım var.
Bir bakarım lâf lâfmı diye,
Birde bakarım söyleyen adammı diye.."

Mevlânâ Celaleddin-i Belhi Rumi
(1207-1273)

Adanmış Hayatlar

"Zaten aşklar hep yalan dolan,
Sonu hep acı hüsran.
Bize her sevdadan geriye kalan
Sadece Galatasaray..
"

Son Dakika

İstanbul'da Hava

ISTANBUL

Ziyaretçi Sayısı

Ziyaretçi Sayısı