مدیریت فایل در سی شارپ دات نت

فایل در سی شارپ

در این مبحث میخواهیم نشان دهیم که چطور وظایفی شامل خواندن و نوشتن فایل ها از چندین بخش مختلف و مدیریت فایل در سی شارپ دات نت را اجرا کنیم. به خصوص این مبحث شامل کشف ساختار دایرکتوری ها و تعیین اینکه چه فایل ها و فولدر هایی موجود هستند و همچنین سایر عملیات مربوط به فایل مانند جا به جایی و کپی و حذف اشیاء از روی دیسک است. هدف اصلی از این مبحث کشف انواع مشخص در فضای نام System I/O و ارائه کننده فهمیدن چندین راه برای خواندن و نوشتن کاراکتر های پایه و دودویی های پایه و رشته های پایه ی ذخیره شده میباشد.

آناتومی سیستم فایل

فضای نام System I/O چهار کلاس ارائه میکند که به شما اجازه میدهد که علاوه بر دستکاری فایل های فردی امکان ارتباط با یک ساختار دایرکتوری ماشین را نیز داشته باشید.دایرکتوری و فایل مستقیما System.Object را ارتقاء میدهند و از عملیات های کپی کردن و ساختن و حرکت دادن و حذف کردن فایل هابا استفاده از چندین متد استاتیک پشتیبانی میکنند. آنها تنها شامل متد های استاتیک میشوند و هیچ نمونه دیگری ندارند . مدل های فایل info و directory info از کلاس انتزاعیfile system info ارث بری میکنند و آنها عموما برای دریافت کامل جزئیات یک فایل یا دایرکتوری به کار گرفته میشوند زیرا اعضای آنها برای انواع اشیاء برگشت پذیر قوی در نظر گرفته شده اند . نحوه ی استفاده از آنها نیز تقریبا مانند متد های عمومی مثل دایرکتوری و فایل ها میباشد با این تفاوت که اعضای کلاس های آنها از نوع استاتیک نیست.

مدیریت فایل در سی شارپ

در چارچوب دات نت  فضای نام System I/O اصلی ترین کتابخانه ی کلاس پایه میباشد که وقف ورودی پایه ای فایل ها و سرویس های خروجی شده است. مانند هر فضای نامی فضای نام System I/O شامل مجموعه ای ازکلاس ها و () و ساختار ها دلگیت ها میباشد. جدول زیر شامل اعضای اصلی این فضای نام میباشد:

مدیریت فایل در سی شارپSystem I/O کلاس Drive info را برای many piolet کردن سیستم درایو های مربوط به وظایف ارائه میدهد . کلاس drive info جزئیات عددی مانند تعداد کل درایو ها و محاسبه ی تمام فضای هارد دیسک و فضای خالی و نام درایو و وضعیت آماده باش و … را در بر میگیرد . برنامه زیر را در نظر بگیرید که در آن همه ی درایو دیسک ها نمایش داده میشوند:

DriveInfo[] di = DriveInfo.GetDrives();
Console.WriteLine("Total Partitions");

foreach(DriveInfo items in di)
{
Console.WriteLine(items.Name);
}

 

کد های زیرشامل اجرای بقیه ی عملیات های متد کلاس drive info با جزئیات میشود و اطلاعات به خصوص درایو موردنظر را نمایش میدهد:

using System;
using System.IO;

namespace DiskPartition
{
class Program
{
static void Main(string[] args)
{
DriveInfo[] di = DriveInfo.GetDrives();

Console.WriteLine("Total Partitions");
Console.WriteLine("---------------------");
foreach(DriveInfo items in di)
{
Console.WriteLine(items.Name);
}
Console.Write("\nEnter the Partition::");
string ch = Console.ReadLine();

DriveInfo dInfo = new DriveInfo(ch);

Console.WriteLine("\n");

Console.WriteLine("Drive Name::{0}",dInfo.Name);
Console.WriteLine("Total Space::{0}", dInfo.TotalSize);
Console.WriteLine("Free Space::{0}", dInfo.TotalFreeSpace);
Console.WriteLine("Drive Format::{0}", dInfo.DriveFormat);
Console.WriteLine("Volume Label::{0}", dInfo.VolumeLabel);
Console.WriteLine("Drive Type::{0}", dInfo.DriveType);
Console.WriteLine("Root dir::{0}", dInfo.RootDirectory);
Console.WriteLine("Ready::{0}", dInfo.IsReady);

Console.ReadKey();
}
}

}

 

بعد از کامپایل کردن  این برنامه , تقریبا تمامی جزئیات دیسک درایو ها و درایو به خصوص مانند زیر نمایش داده میشوند:

مدیریت فایل در سی شارپ

 کار کردن با دایرکتوری ها

چارچوب دات نت شامل دو کلاس ابتدایی directory info و directory برای عملیات های ارتباط مستقیم مانند ساختن و حذف کردن میباشد.

کلاس Directory Info

کلاس Directory Info شامل مجموعه ای برای ساختن و پاک کردن و حرکت دادن و شمارش در دایرکتوری ها و زیر دایرکتوری ها میباشد. در نمونه کد زیر اطلاعات مربوط به Directory Temp را نمایش میدهد :

DirectoryInfo di=new DirectoryInfo(@"D:\temp");

Console.WriteLine("*******Direcotry Informations*******\n\n");
Console.WriteLine("Full Name={0}",di.FullName);
Console.WriteLine("Root={0}",di.Root);
Console.WriteLine("Attributes={0}", di.Attributes);
Console.WriteLine("Creation Time={0}", di.CreationTime);
Console.WriteLine("Name={0}", di.Name);
Console.WriteLine("Parent={0}", di.Parent);

 

کد قبلی اطلاعات مربوط به Directory Temp واقع در درایو D را همانند را بدست می آورد:مدیریت فایل در سی شارپ

در واقع ما یک فرضیه ای میسازیم که مسیرش از ساختمان کلاس Directory Info فیزیکی موجود میگذرد. به هر حال اگر قصد داشته باشید تا با دایرکتوری های ناموجود ارتباط داشته باشید آنگاه CLR آن را یک استثناء در نظر میگیرد. پس ما باید ابتدا یک دایرکتوری برای کنترل استثناء بسازیم که به صورت زیر خواهد بود:

DirectoryInfo di=new DirectoryInfo(@"D:\temp\xyz");
di.Create();

 

همچنین ما میتوانیم با برنامه نویسی , ساختار دایرکتوری را با استفاده از متد ساختن زیردایرکتوری ارتقاء دهیم. نمونه کد زیر ابتدا یک زیر دایرکتوری در درایو D ساخته و سپس همانند ادامه :

DirectoryInfo di=new DirectoryInfo(@"D:\");
di.CreateSubdirectory("ajay");
di.CreateSubdirectory(@"ajay\ajay11");

 

کلاس دایرکتوری

کلاس دایرکتوری قابلیت هایی مشابه کلاس Directory Info ارائه میکند. کلاس دایرکتوری عموما به جای اشیاء Directory Info نوع قوی داده های به صورت رشته را برمیگرداند. نمونه کد زیر دایرکتوری و زیردایرکتوری در درایو D را حذف میکند:

static void Main(string[] args)

{

DirectoryInfo di = new DirectoryInfo(@"d:\abc");

Console.WriteLine("Name:{0}",di.FullName);

Console.Write("Are you sure to Delete:");

string str=Console.ReadLine();

if (str == "y")

{

Directory.Delete(@"d:\abc", true);

}

Console.Write("Deleted.....");

}

 

خواندن و نوشتن برروی فایل ها

عملیات های خواندن و نوشتن با استفاده از اشیاء فایل انجام میگیرد. قطعه کد کوچک زیر یک فایل متنی که جایی در ماشین قرار دارد را میخواند:

private void button1_Click(object sender, EventArgs e)
{
try
{
textBox2.Text = File.ReadAllText(txtPath.Text);
}
catch (FileNotFoundException)
{
MessageBox.Show("File not Found....");
}
}

 

در اینجا ابتدا رابط کاربر از کاربر میخواهد که مسیر فایلی که میخواهد نمایش دهد را مشخص کند. سپس مسیر به متد فایل ReadAllText که تمام فایل های خواندنی یکپارچه در فایل را میخواند و در TextBox نمایش میدهد , پاس داده میشود.

در کنار خواندن یک فایل ما میتوانیم محتویاتی را بر روی یک فایل خواندنی موجود بنویسیم که با متد WriteAllText کار میکند . همانند زیر :

File.WriteAllText(@"d:\test.txt", textBox2.Text);

 

طول میکشد تا یک مسیر برای ذخیره فایل و ورودی محتوای متوسط آن مانند یک جعبه متن یا کنترل دیگری بسازیم . شکل زیر خواندن یک فایل متنی با استفاده از مسیر مربوطه آن را شرح میدهد :

مدیریت فایل در سی شارپ

Stream

دات نت شئ های بسیاری مانند FileStream و Stream Reader/Writer و Binary Reader/Writer برای خواندن و نوشتن داده ها در یک فایل ارائه میدهد . یک جریان اساسا برای نمایش مقدار زیادی داده سیال بین مبدا و مقصد به کار میرود. جریان یک راه معمولی برای ارتباط با دنباله ای از بایت ها بدون توجه به ذخیره ی دستگاه یا بایت های نمایش میباشد.جدول زیر توابع جاعضای جریان معمولی را ارائه میدهد:

مدیریت فایل در سی شارپ

FileStream

FileStream مثالیست که برای خواندن و نوشتن داده ها در یک فایل استفاده میشود. برای ساخت یک FileStream ابتدا ما به فایلی که میخواهیم به آن دسترسی داشته باشیم نیاز داریم. سپس متدی که نشان میدهد ما چگونه میخواهیم فایل را باز کنیم. بعد از آن دسترسی که نشان میدهد ما چگونه میخواهیم به فایل دسترسی داشته باشیم و در نهایت اشتراک دسترسی که مشخص میکند شما میخواهید دسترسی اختصاصی به فایل داشته باشید.

مدیریت فایل در سی شارپ

FileStream  فقط میتواند یک بایت یا یک آرایه از بایت ها را بخواند یا بنویسد. شما احتیاج دارید که نوع System.Sring را با آرایه ی بایت مربوطه اش رمزی کنید . فضای نام System.Text نوعی بنام رمزی کردن را مشخص میکند که که اعضای رمزی کردن را ارائه میدهد و رشته را به آرایه ای از بایت ها تبدیل میکند. هنگامی که رمزی شد آرایه ی بایت به فایلی با متد FileStream ادامه پیدا میکند. Write برای خواندن دوباره بایت به حافظه شما باید موقعیت داخلی جریان را دوباره تنظیم کنید و متد ReadByte را فراخوانی کنید.شما ردیفی از آرایه ی بایت ها و رشته های تبدیل شده به کنسول را نمایش میدهید:

using(FileStream fs=new FileStream(@"d:\ajay123.doc",FileMode.Create))
{
string msg = "first program";
byte[] byteArray = Encoding.Default.GetBytes(msg);
fs.Write(byteArray, 0, byteArray.Length);
fs.Position = 0;

byte[] rFile = new byte[byteArray.Length];

for (int i = 0; i < byteArray.Length; i++)
{
rFile[i] = (byte)fs.ReadByte();
Console.WriteLine(rFile[i]);
}

Console.WriteLine(Encoding.Default.GetString(rFile));
}

 

Binary Reader و Binary Writer

کلاس Binary Reader/Writer به شما اجازه میدهد که داده هایی از نوع مجزا را بخوانید و بنویسید . به صورت جریانی اساسی در یک فرمت باینری جمع و جور. کلاس Binary Writer متد Write بسیار پرباری را مشخص میکند تا نوع داده را در سیستم اساسی قرار دهد .

مدیریت فایل در سی شارپ

نمونه زیر ابتدا تعداد مطالب اطلاعات را در یک فایل Champu.Date جدید با استفاده از Binary Writer مینویسد. سپس برای خواندن داده ها کلاس Binary Reader تعدادی متد را به کار میگیرد:

class Program
{
static void Main(string[] args)
{
// writing
FileInfo fi = new FileInfo("champu.dat");
using (BinaryWriter bw = new BinaryWriter(fi.OpenWrite()))
{
int x = 007;
string str = "hello champu ,one day you will become doomkatu";

bw.Write(x);
bw.Write(str);
}

//Reading
FileInfo f = new FileInfo("champu.dat");
using (BinaryReader br = new BinaryReader(fi.OpenRead()))
{
Console.WriteLine(br.ReadInt32());
Console.WriteLine(br.ReadString());
}
Console.ReadLine();

}
}

 

String Reader و String Writer

ما میتوانیم برای کار با اطلاعات متنی به صورت جریانی در کاراکتر های حافظه با String Reader و String Writer کار کنیم. این میتواند مفید واقع شود اگر وقتی که شما بخواهید اطلاعات پایه ای کاراکتر را به حائل اساسی بیافزایید. کد زیر این عملیات را به طور کامل نشان میدهد :

static void Main(string[] args)
{
// writing
using (StringWriter sw = new StringWriter())
{
sw.WriteLine("helloooooooooooooooooooo");

// Reading
using (StringReader sr = new StringReader(sw.ToString()))
{
string input = null;
while((input = sr.ReadLine())!=null)
{
Console.WriteLine(input);
}
}
}
}

 

جمع بندی

این پروژه با معرفی فایل های System.Net و سلسله مراتب جزئیات کلاس ها آغاز شد. دستکاری فایل فیزیکی یا دایرکتوری بر روی هارد دیسک خود را با استفاده از فایل ها و کلاس های دایرکتوری آموختیم. پس از آن جزئیات کلاس جریان را امتحان کردیم. فضای نام System I/O تعداد متعددی نویسنده و خواننده برای مثال FileStream و BinaryStream و StringStream و … ارائه میکند. پس این پروژه درک کلی دسترسی به داده ها از درایو ها و نوشتن دوباره بر روی آنها را ارائه میکند.

  • پسورد: www.mspsoft.com
محبوبه میرزائی

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

    sdh.it پاسخ

    that's perfect