Koray Kırdinli

Yazılım ve İş Yaşamı Hakkında Paylaşımlar

MCTS – Input/Output (IO) – Dosya İşlemleri

2.    Input/Output (IO) – Dosya İşlemleri

 

Bu yazıda aşağıdaki kavramlara kısaca değineceğiz. File,FileInfo,Directory,DirectoryInfo, DriveInfo,DriveType, FileSystemInfo,Path,FileSystemWatcher

FileSystemInfo sınıfı IO işlemleri için base sınıftır.

Bir dosyaya erişmek
FileInfo fi = newFileInfo(“SystemIO.txt”);

if (fi.Exists)

{

   string text=String.Format(“{0} – {1}”,fi.Name,fi.FullName);

   richTextBox1.Text = text;

}

Bir dizindeki dosyaları listelemek
DirectoryInfo directory = newDirectoryInfo(@”C:”);

foreach (FileInfo item in directory.GetFiles())

{

     lstFiles.Items.Add(item.Name);

}

 

 

Diskteki Sürücüleri listelemek(c,d,e,..)
DriveInfo[] drives = DriveInfo.GetDrives();

foreach (DriveInfo item in drives)

{

    lstDrivers.Items.Add(item.Name+ ” – “+item.DriveType.ToString());

}

FileSystemWatcher bir dizinde meydana gelen değişiklikleri izlemeye yardımcı olur.

FileSystemWatcher fsw = newFileSystemWatcher(@”C:”);

fsw.Created+=newFileSystemEventHandler(fsw_Created);

fsw.Changed+=newFileSystemEventHandler(fsw_Changed);

fsw.EnableRaisingEvents = true;

Bir data işlemi söz konusu olduğunda bunları memory de stream denilen ve Stream sınıfından türemiş sınıflar kullanılır.Bunlar: FileStream,MemoryStream,CryptoStream,NetworkStream,GZipStream

Bir streamin sonuna byte arrayi ekleyen metod
void AppendDataToStream(Stream stream, byte[] data)

        {

            //Streamde pozisyonu sona getir

            stream.Position = stream.Length;

            //Byte dizisini streame ekle

            stream.Write(data, 0, data.Length);

        }

File sınıfı okuma veya yazma işlemleri için bir dosyayı açmaya ve kapamaya yarar.
FileStream file = File.Open(“SystemIO.txt”, FileMode.Open, FileAccess.Read);

StreamReader streamReader = newStreamReader(file);

lblText.Text = streamReader.ReadToEnd();

streamReader.Close();

veya bu işi tek satırda da halledebiliriz.

lblText.Text = File.ReadAllText(“SystemIO.txt”);

BinaryReader ve BinaryWriter bir dosyaya veriyi binary olarak işlemek ve geri binary olarak okumak için kullanılır. Binary olarak yazılan bir dosya ancak binary olarak geri okunabilir.
FileStream newFile = File.Open(“SystemIO.bin”, FileMode.OpenOrCreate);

BinaryReader reader = newBinaryReader(newFile);

long number = reader.ReadInt64();

byte[] bytes = reader.ReadBytes(4);

string s = reader.ReadString();

reader.Close();

MemoryStreams hafızada oluşturulan stream nesneleridir.Bir streami fiziksel olarak bir yerlere kaydetmeden önce memory de saklayabiliriz.

MemoryStream stream = newMemoryStream();

//Once memory e bilgiler yazilir

StreamWriter writer = newStreamWriter(stream);

writer.Write(“Hello”);

writer.Write(“GoodBye”);

writer.Flush();

//Memory deki bilgiler dosyaya kaydedilir.

FileStream file = File.Create(@”MemoryStrem.txt”);

stream.WriteTo(file);

writer.Close();

file.Close();

stream.Close();

 

 

BuffuredStream direk olarak bir streamlere yazıp okurken performansı artırmak için kullanılır.

FileStream newFile = File.Create(@”buffered.txt”);

BufferedStream buffered = newBufferedStream(newFile);

StreamWriter writer = newStreamWriter(buffered);

writer.WriteLine(“some data”);

writer.Close();;

Sorular:
– FileStremin pozition propertisini hangi metod etkiler
Read,Write,Seek metodları

 

Compressing Streams:
Streamleri sıkıştırmak için .NET te 2 yöntem mevcuttur. GZip ve Deflate.
Peki hangisini kullanmalıyız. İkiside aynı algoritmayı kullanmaktadır. GZip ile sıkıştırılan bir stream gzip aracıyla açılabilir. Sıkıştırma ve açma işlemleri sadece kendi sisteminiz içerisinde olacaksa Deflate biraz daha fazla sıkıştırma yaptığı için tercih edilebilir. Fakat sıkıştırılan dosyayı dağıtacaksanız Gzip kullanılmalıdır.

FileStream sourceFile = File.OpenRead(“SystemIO.txt”);

FileStream destFile = File.Create(“SystemIO”);

 

Stream compStream = newGZipStream(destFile, CompressionMode.Compress);

 

if (rbGzip.Checked)

{

    compStream = newGZipStream(destFile, CompressionMode.Compress);

}

elseif (rbDeflate.Checked)

{

    compStream = newDeflateStream(destFile, CompressionMode.Compress);

}

int theByte = sourceFile.ReadByte();

while (theByte != -1)

{

    compStream.WriteByte((byte)theByte);

    theByte = sourceFile.ReadByte();

}

Isolated Storage : Bir kullanıcıyı full yetkili olarak bir programı kullandırmak güvenlik zaafiyetlerine yol açabilmektedir. Bir kullanıcıya limitli erişim vermek için isolated storage’ler kullanılır. Isolated Storage ler kullanıcı bilgilerini güvenli bir ortamda saklamayı sağlarlar. En önemli avantajı da işletim sisteminde partial,limited veya full-trust çalışılmasının önemli olmamasıdır.
İlk önce saklayacağınız verinin skobunu belirlemeniz gerekiyor.

Assembly/Machine : Bu metod çağrılan assembly e ve makineye özgüdür. Application- Level Data için uygundur.

//Bu storage sadece çağıran assembly e özgüdür.Bu bir windows form uygulaması

//olabileceği gibi bir DLL de olabilir.

IsolatedStorage machineStorage = IsolatedStorageFile.GetMachineStoreForAssembly();
Assembly/User : Bu metod çağrılan assembly e ve kullanıcıya özgüdür. User Level Data için uygundur.
Aşağıdaki user bazlı storage e okuma ve yazma örneği yapılmıştır.

IsolatedStorageFile userStorage = IsolatedStorageFile.GetUserStoreForAssembly();

//Bu storage çağıran kullanıcıya özgüdür.Personalization

//Önce isole edilecek dosya olusturulur

           

//Sonrada isole edilmiş stream olusturulur ve dosya bu streame eklenir.

IsolatedStorageFileStream userStream = newIsolatedStorageFileStream(“UserSettings.set”, FileMode.Create,userStorage);

 //Stream writer ile yazılır.

 StreamWriter writer = newStreamWriter(userStream);

writer.WriteLine(“Kullanici Bilgileri”);

writer.Close();
//Okuma
IsolatedStorageFileStream userStream = newIsolatedStorageFileStream(“UserSettings.set”,FileMode.Open,userStorage);

string[] files = userStorage.GetFileNames(“UserSettings.set”);

for (int i = 0; i < files.Length; i++)

{

    MessageBox.Show(files[i]);

}

Isolated Storage’da dizin oluşturma:
IsolatedStorageFileStream userStream = newIsolatedStorageFileStream(@”DizinUserSettings.set”,FileMode.Create,userStorage);

string[] directories = userStorage.GetDirectoryNames(“Dizin”);

if (directories.Length == 0)

{

    userStorage.CreateDirectory(“Dizin”);

}

April 15, 2010 - Posted by | C# | , , , ,

No comments yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s