Implementing Desing Patterns in File Handling using C#
نحوه استفاده از الگوهای طرّاحی در مدیریت فایلها
کارکردن با فایلها در زبان
نحوه استفاده از الگوهای طرّاحی در مدیریت فایلها
کارکردن با فایلها در زبان C#
کارکردن با فایلها در زبان C# به دلیل استفاده از اشیای منعطف بسیار آسان است.
شیء File
شیء File یک فایل را نشان میدهد و دارای توابع بسیاری برای بررسی وجود یک فایل ، تغییر نامِ و پاککردن یا حذف آن است. تمام توابع موجود در شی File ایستا[1] هستندکه در اینصورت هرگز قادر به درست کردن یک شی یا نمونه[2] از کلاس File نخواهیم بود:
if (File.Exists ("Foo.txt"))
File.Delete ("foo.txt");
با استفاده از کلاسِ فایل حتی میشود از FileStream برای خواندن از یا نوشتن در فایل استفاده نمود:
//open text file for reading
StreamReader ts = File.OpenText ("foo1.txt");
//open any type of file for reading
FileStream fs = File.OpenRead ("foo2.any");
خواندن فایلهای متنی
برای خواندن از فایلهای متنی ، از شی File برای بدستآوردن یک شی از StreamReader استفاده نمائید:
StreamReader ts = File.OpenText ("foo1.txt");
String s =ts.ReadLine ();
نوشتن در فایل ِمتنی
برای نوشتن در فایلِ متنی از تابع CreateText برای دستیابی به شیای از کلاس StreamWriter استفاده کنید.
//open for writing
StreamWriter sw = File.CreateText ("foo3.txt");
sw.WriteLine ("Hello file");
اگر مایل هستید که متنی را به فایل متنیتان بچسبانید میتوانید مستقیماً یک شی از StreamWriter درست کنید و آرگومان بولی (بولیان)[3] آن را برابر True کنید.
//append to text file
StreamWriter asw = new StreamWriter ("foo1.txt", true);
استثنائات در مدیریت فایلها
بیشتر استثنائات در ورودی و خروجی فایل رخ میدهد. استثتائاتی از قبیل اینکه فایلی را که وجود ندارد مورد استفاده قرار بگیرد و یا از آرگومانهای نامناسب برای فایل استفاده شده باشد. بنابراین مطمئنترین راه برای اجتناب از عواقب این استثنائات محصورسازی برنامه در بستههای Try و Catch است.
try {
//open text file for reading
StreamReader ts = File.OpenText ("foo1.txt");
String s =ts.ReadLine ();
}
catch(Exception e ) {
Console.WriteLine (e.Message );
}
بررسی پایان یک فایل
دو راه برای اینکه از خواندن اطلاعات بعد از پایان فایل جلوگیری شود ؛ وجود دارد. یکی به دنبال استثنای Null رفتن و دیگری به پایان data stream رسیدن است.
private StreamReader rf;
private bool eof;
//------------
public String readLine () {
String s = rf.ReadLine ();
if(s == null)
eof = true;
return s;
}
//------------
public bool fEof() {
return eof;
}
راه دیگر استفاده از Peek است که مقدار اَسکی[4] حرف بعدی را میخواند که مقدار 1- نبودن اطلاعات را میرساند.
public String read_Line() {
String s = ""
if (rf.Peek() > 0) {
s = rf.ReadLine ();
}
else
eof=true;
return s;
}
استفاده از کلاسهای فایلینگ
یک راه مفید از مدیریت فایلها استفاده از کلاسهایی با توابعی آسان است :
public class csFile
{
private string fileName;
StreamReader ts;
StreamWriter ws;
private bool opened, writeOpened;
//-----------
public csFile() {
init();
}
//-----------
private void init() {
opened = false;
writeOpened = false;
}
//-----------
public csFile(string file_name) {
fileName = file_name;
init();
}
با این کار میتوان از یک فایل خواند یا در آن نوشت و اطلاعات موجود را در آن مدیریت کرد. میتوان با استفاده از مقادیری بولی از باز یا بستهبودن یک فایل برای استفاده از آن استفاده کرد :
public bool OpenForRead(string file_name){
fileName = file_name;
try {
ts = new StreamReader (fileName);
opened=true;
}
catch(FileNotFoundException e) {
return false;
}
return true;
}
//-----------
public bool OpenForRead() {
return OpenForRead(fileName);
}
میتوان اطلاعات را از یک فایل متنی خواند :
public string readLine() {
return ts.ReadLine ();
}
به همین ترتیب میتوان از توابع زیر برای باز کردن یک فایل و نوشتن در آن استفاده نمود:
public void writeLine(string s) {
ws.WriteLine (s);
}
//-----------
public bool OpenForWrite() {
return OpenForWrite(fileName);
}
//-----------
public bool OpenForWrite(string file_name) {
try{
ws = new StreamWriter (file_name);
fileName = file_name;
writeOpened = true;
return true;
}
catch(FileNotFoundException e) {
return false;
}
}
منابع و مآخذ:
James W. Cooper , Introduction to Design Patterns in C# , IBM T J Watson Research Center , February 1, 2002
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home