خواندن خط به خط فایل در سیشارپ
خواندن خط به خط فایل روشی برای پردازش فایلهای متنی است که با خواندن تدریجی دادهها، مصرف حافظه را کاهش میدهد.
خواندن خط به خط فایل در سیشارپ (#C)
کار با فایلها یکی از مهمترین مهارتهایی است که هر برنامهنویس سیشارپ باید به آن مسلط باشد.
تقریباً در تمامی پروژههای واقعی، از نرمافزارهای دسکتاپ گرفته تا سرویسهای تحت وب، نیاز به خواندن اطلاعات از فایلهای متنی وجود دارد.
فایلهای Log، فایلهای CSV، فایلهای تنظیمات (Configuration)، فایلهای خروجی سیستمها و بسیاری از دادههای متنی دیگر همگی نیازمند پردازش هستند.
یکی از بهترین روشهای پردازش فایلهای متنی، خواندن خط به خط فایل است.
این روش باعث میشود حافظه کمتری مصرف شود و برنامه بتواند فایلهای بسیار بزرگ را نیز بدون مشکل پردازش کند.
چرا فایل را خط به خط بخوانیم؟
فرض کنید یک فایل لاگ با حجم ۵ گیگابایت دارید.
اگر کل فایل را یکجا در حافظه بارگذاری کنید:
- مصرف RAM بسیار زیاد میشود.
- احتمال OutOfMemoryException وجود دارد.
- سرعت برنامه کاهش پیدا میکند.
اما اگر فایل را خط به خط بخوانید:
- فقط یک خط در حافظه قرار میگیرد.
- مصرف حافظه بسیار پایین خواهد بود.
- امکان پردازش فایلهای بسیار بزرگ فراهم میشود.
به همین دلیل مایکروسافت نیز برای فایلهای حجیم استفاده از روش StreamReader را پیشنهاد میکند.
کلاس StreamReader در سیشارپ
اصلیترین کلاس برای خواندن فایلهای متنی در فضای نام System.IO قرار دارد.
ابتدا باید فضای نام زیر را اضافه کنید:
using System.IO;
سپس میتوان از StreamReader استفاده کرد.
آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
سادهترین روش خواندن خط به خط فایل
using System;
using System.IO;
class Program
{
static void Main()
{
using (StreamReader reader = new StreamReader("data.txt"))
{
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
}
}
در این مثال:
- فایل باز میشود.
- هر بار یک خط خوانده میشود.
- پس از پایان فایل، مقدار null برمیگردد.
- using باعث آزاد شدن منابع میشود.
استفاده از حلقه while
متداولترین روش، استفاده از حلقه while است.
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
تابع ReadLine هر بار:
- یک خط را میخواند.
- Enter را حذف میکند.
- متن همان خط را برمیگرداند.
استفاده از File.ReadLines
یکی از سادهترین روشها:
foreach (string line in File.ReadLines("data.txt"))
{
Console.WriteLine(line);
}
مزایای این روش:
- کدنویسی ساده
- مصرف حافظه کم
- مناسب فایلهای بزرگ
- عدم نیاز به ساخت StreamReader
تفاوت ReadLines و ReadAllLines
بسیاری از برنامهنویسان این دو متد را اشتباه استفاده میکنند.
ReadAllLines
string[] lines = File.ReadAllLines("data.txt");
این متد:
- کل فایل را وارد حافظه میکند.
- سپس آرایهای از خطوط برمیگرداند.
- برای فایلهای کوچک مناسب است.
ReadLines
foreach(var line in File.ReadLines("data.txt"))
{
Console.WriteLine(line);
}
در این روش:
- خطوط به صورت تدریجی خوانده میشوند.
- مصرف حافظه بسیار کمتر است.
خواندن فایلهای بزرگ
فرض کنید فایل ۱۰ میلیون خط دارد.
using StreamReader reader = new StreamReader("LargeFile.txt");
string line;
while((line = reader.ReadLine()) != null)
{
// پردازش اطلاعات
}
این روش حتی برای فایلهای چند گیگابایتی نیز مناسب است.
شمارش تعداد خطوط فایل
int count = 0;
foreach(var line in File.ReadLines("data.txt"))
{
count++;
}
Console.WriteLine(count);
جستجو در فایل
فرض کنید دنبال کلمه Error هستید.
foreach(var line in File.ReadLines("log.txt"))
{
if(line.Contains("Error"))
{
Console.WriteLine(line);
}
}
خواندن فایل با Encoding مشخص
اگر فایل فارسی باشد:
using System.Text;
StreamReader reader =
new StreamReader(
"data.txt",
Encoding.UTF8);
یا
Encoding.Unicode
یا
Encoding.ASCII
بسته به نوع فایل.
بهترین روش برای خواندن فایلهای حجیم در سی شارپ
اگر سرعت و حافظه مهم باشد:
-
StreamReader
هر بار تنها یک خط از فایل را میخواند و برای پردازش فایلهای بسیار بزرگ، لاگها و دادههای متنی بهترین انتخاب است.
-
()File.ReadLines
عملکردی مشابه StreamReader دارد و خطوط فایل را بهصورت Lazy Loading در اختیار برنامه قرار میدهد؛ بنابراین بدون بارگذاری کامل فایل در حافظه، امکان پردازش دادهها را فراهم میکند.
بهترین انتخاب هستند.

مدیریت خطا
همیشه هنگام خواندن فایل از Try Catch استفاده کنید.
try
{
foreach(var line in File.ReadLines("data.txt"))
{
Console.WriteLine(line);
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
بررسی وجود فایل
if(File.Exists("data.txt"))
{
Console.WriteLine("فایل موجود است");
}
else
{
Console.WriteLine("فایل پیدا نشد");
}
پردازش فایل CSV
foreach(var line in File.ReadLines("users.csv"))
{
string[] items = line.Split(',');
Console.WriteLine(items[0]);
}
خواندن فقط اولین خط
using StreamReader reader =
new StreamReader("data.txt");
string firstLine = reader.ReadLine();
Console.WriteLine(firstLine);
رد کردن چند خط اول
int skip = 5;
foreach(var line in File.ReadLines("data.txt").Skip(skip))
{
Console.WriteLine(line);
}
خواندن شماره خط
int lineNumber = 1;
foreach(var line in File.ReadLines("data.txt"))
{
Console.WriteLine($"{lineNumber}: {line}");
lineNumber++;
}
استفاده از async
برای پروژههای مدرن:
using StreamReader reader =
new StreamReader("data.txt");
while(await reader.ReadLineAsync() is string line)
{
Console.WriteLine(line);
}
این روش رابط کاربری را بلاک نمیکند.
اشتباهات رایج خواندن خط به خط فایل
برخی اشتباهات متداول عبارتاند از:
-
استفاده از ReadAllText برای فایلهای بزرگ
-
فراموش کردن using
-
مدیریت نکردن Exception
-
انتخاب Encoding اشتباه
-
باز گذاشتن فایل بدون Dispose
-
نادیده گرفتن بررسی وجود فایل

مقایسه روشهای خواندن فایل
| روش | سرعت | مصرف حافظه | مناسب فایل بزرگ |
| ReadAllText | زیاد | بسیار زیاد | ❌ |
| ReadAllLines | زیاد | زیاد | ❌ |
| ReadLines | زیاد | کم | ✅ |
| StreamReader | بسیار زیاد | بسیار کم | ✅ |
بهترین شیوهها (Best Practices)
برای داشتن برنامهای بهینه، نکات زیر را رعایت کنید:
- همیشه از using برای آزادسازی منابع استفاده کنید.
- برای فایلهای بزرگ از StreamReader یا ()File.ReadLines بهره ببرید.
- قبل از باز کردن فایل، وجود آن را با ()File.Exists بررسی کنید.
- از try...catch برای مدیریت خطاها استفاده کنید.
- Encoding فایل را متناسب با نوع داده انتخاب کنید.
- در برنامههای مدرن و رابط کاربری، از متدهای Async مانند ()ReadLineAsync استفاده کنید.
- از بارگذاری کامل فایل در حافظه مگر در فایلهای کوچک خودداری کنید.
جمعبندی
خواندن خط به خط فایل در سیشارپ یکی از مهمترین تکنیکها برای پردازش فایلهای متنی است.
استفاده از StreamReader و ()File.ReadLines علاوه بر کاهش مصرف حافظه، باعث افزایش کارایی برنامه و امکان پردازش فایلهای حجیم میشود.
انتخاب روش مناسب به حجم فایل، نوع پروژه و نیازهای عملکردی بستگی دارد، اما در اکثر پروژههای حرفهای، خواندن تدریجی فایل بهترین گزینه محسوب میشود.
با رعایت اصول مدیریت خطا، استفاده از Encoding صحیح و آزادسازی منابع، میتوانید برنامههایی سریع، پایدار و قابل اعتماد توسعه دهید.


کاربران ما
شما هم نظرتون با ما دریاره “خواندن خط به خط فایل در سیشارپ” اشتراک بزارید
برای ارسال نظر لطفا ورود یا ثبت نام کنید