آموزش کار با StreamWriter در سیشارپ : نوشتن دادهها در فایلها
در سیشارپ ، یکی از نیازهای رایج توسعهدهندگان ، نوشتن دادهها در فایلها بهصورت متنی است . کلاس StreamWriter در فضای نام System.IO ابزاری قدرتمند و ساده برای این منظور فراهم میکند. در این مقاله، بهطور جامع به بررسی StreamWriter ، نحوه استفاده از آن، ویژگیها و نکات مهم مرتبط با آن میپردازیم.
StreamWriter چیست؟
StreamWriter یک کلاس در داتنت است که برای نوشتن کاراکترها و متنها در یک جریان (Stream) بهصورت ترتیبی طراحی شده است. این کلاس معمولاً برای نوشتن دادهها در فایلهای متنی استفاده میشود و از کدگذاریهای مختلف (مانند UTF-8، ASCII و غیره) پشتیبانی میکند.
چرا از StreamWriter استفاده کنیم؟
سادگی: رابط کاربری سادهای برای نوشتن متن در فایلها یا جریانها ارائه میدهد.
انعطافپذیری: امکان استفاده از کدگذاریهای مختلف برای پشتیبانی از زبانها و کاراکترهای خاص.
مدیریت منابع: با استفاده از بلوک using ، مدیریت خودکار منابع را فراهم میکند و از نشت حافظه جلوگیری میکند.
نحوه استفاده از StreamWriter
برای شروع کار با StreamWriter باید فضای نام System.IO را به پروژه خود اضافه کنید. در ادامه، مراحل اصلی استفاده از این کلاس را بررسی میکنیم.
1 - ایجاد یک نمونه از StreamWriter
شما میتوانید یک نمونه از StreamWriter را با مشخص کردن مسیر فایل یا یک جریان (Stream) ایجاد کنید. مثال زیر نشان میدهد چگونه یک فایل متنی جدید ایجاد کرده و در آن بنویسید:
using System;
using System.IO;
class Program
{
static void Main()
{
string filePath = "example.txt";
using (StreamWriter writer = new StreamWriter(filePath))
{
writer.WriteLine("سلام رضا!");
}
Console.WriteLine("نوشتن در فایل با موفقیت انجام شد.");
}
}
در این کد:
using تضمین میکند که پس از اتمام کار ، منابع بهدرستی آزاد شوند.
WriteLine یک خط متن را در فایل مینویسد و به خط بعدی میرود.
2 - متدهای اصلی StreamWriter
StreamWriter چندین متد مفید برای نوشتن دادهها ارائه میدهد:
Write(string) : یک رشته را بدون افزودن خط جدید مینویسد.
WriteLine(string) : یک رشته را مینویسد و به خط جدید میرود.
Flush() : بافر داخلی را خالی کرده و دادهها را به جریان یا فایل منتقل میکند.
Close() : جریان را میبندد (در صورت استفاده از using نیازی به فراخوانی صریح آن نیست) .
مثال:
using (StreamWriter writer = new StreamWriter("example.txt"))
{
writer.Write("این یک متن است ");
writer.WriteLine("که در یک خط نوشته میشود.");
writer.WriteLine("خط دوم!");
}
3 - استفاده از کدگذاری (Encoding)
بهطور پیشفرض، StreamWriter از کدگذاری UTF-8 استفاده میکند، اما میتوانید کدگذاری دیگری را مشخص کنید. برای مثال:
using (StreamWriter writer = new StreamWriter("example.txt", false, System.Text.Encoding.UTF32))
{
writer.WriteLine("متن با کدگذاری UTF-32");
}
پارامتر دوم (false) مشخص میکند که فایل از نو نوشته شود (در صورت true، به انتهای فایل اضافه میشود).
نکات مهم در استفاده از StreamWriter
مدیریت استثناها: هنگام کار با فایلها، ممکن است خطاهایی مانند عدم دسترسی به فایل رخ دهد. بهتر است از بلوک try-catch استفاده کنید:
try
{
using (StreamWriter writer = new StreamWriter("example.txt"))
{
writer.WriteLine("متن آزمایشی");
}
}
catch (IOException ex)
{
Console.WriteLine("خطا در نوشتن فایل: " + ex.Message);
}
اضافه کردن به فایل (Append) : برای افزودن متن به انتهای فایل موجود، از پارامتر append استفاده کنید:
using (StreamWriter writer = new StreamWriter("example.txt", true))
{
writer.WriteLine("متن جدید به انتها اضافه شد.");
}
بستن جریان: اگر از using استفاده نکنید، باید بهصورت دستی Close() یا Dispose() را فراخوانی کنید تا منابع آزاد شوند.
مثال کاربردی: ثبت لاگها
یکی از کاربردهای رایج StreamWriter ، ثبت لاگها در یک فایل است:
public class Logger
{
private readonly string logFilePath = "log.txt";
public void Log(string message)
{
using (StreamWriter writer = new StreamWriter(logFilePath, true))
{
writer.WriteLine($"{DateTime.Now}: {message}");
}
}
}
class Program
{
static void Main()
{
Logger logger = new Logger();
logger.Log("برنامه شروع شد.");
logger.Log("یک عملیات انجام شد.");
}
}
تفاوت StreamWriter با File.WriteAllText
شاید بپرسید چرا از StreamWriter استفاده کنیم وقتی متدهای سادهتری مثل File.WriteAllText وجود دارند؟ پاسخ این است:
File.WriteAllText برای نوشتن یکباره کل متن مناسب است، اما کنترل کمی ارائه میدهد.
StreamWriter برای نوشتن ترتیبی و در سناریوهایی که نیاز به مدیریت جریان یا نوشتن خط به خط دارید، ایدهآل است.
جمعبندی
StreamWriter ابزاری قدرتمند و انعطافپذیر برای نوشتن دادههای متنی در فایلها و جریانها در سیشارپ است. با استفاده از این کلاس، میتوانید بهراحتی فایلهای متنی ایجاد کنید، به آنها اضافه کنید و حتی کدگذاری دلخواه خود را اعمال کنید. با رعایت نکاتی مثل مدیریت استثناها و آزادسازی منابع، میتوانید کدی تمیز و کارآمد بنویسید.