خرید دوره های برنامه نویسی با کیف پولت

ورودی/خروجی فایل در سی‌شارپ,ابزارها و کلاس‌های کلیدی در System.IO

ورودی/ خروجی فایل در سی شارپ

ورودی/خروجی فایل در سی‌شارپ شامل عملیات ایجاد، خواندن، نوشتن و حذف فایل‌ها با کلاس‌های System.IO بصورت همزمان و غیرهمزمان است

تیم تحریریه
347
0
03 دی 1403
لینک کوتاه

ورودی/خروجی فایل در سی‌شارپ

ورودی/خروجی فایل (File I/O) یکی از مفاهیم کلیدی در توسعه نرم‌افزار است که امکان خواندن و نوشتن داده‌ها از/به فایل‌های ذخیره شده در سیستم را فراهم می‌کند.

سی‌شارپ (C#)، به عنوان یک زبان برنامه‌نویسی شیءگرا و چندمنظوره، ابزارها و کلاس‌های قدرتمندی را برای کار با فایل‌ها فراهم کرده است.

این مقاله به بررسی اصول ورودی/خروجی فایل در سی‌شارپ، تفاوت‌های میان ورودی/خروجی همزمان (Synchronous I/O) و غیرهمزمان (Asynchronous I/O)، و نحوه استفاده از آنها در پروژه‌های واقعی می‌پردازد.

 

ورودی/خروجی فایل در سی‌شارپ

مقدمه‌ای بر ورودی/خروجی فایل

ورودی/خروجی فایل به فرآیند خواندن داده‌ها از فایل‌های موجود یا نوشتن داده‌های جدید در فایل‌ها اطلاق می‌شود.

این عملیات‌ها به‌طور معمول شامل موارد زیر است:

  • خواندن داده‌ها

    دریافت اطلاعات از فایل‌ها.
  • نوشتن داده‌ها

    ذخیره اطلاعات در فایل‌ها.
  • مدیریت فایل

    ایجاد، حذف، و ویرایش فایل‌ها یا دایرکتوری‌ها.

سی‌شارپ از فضای نام System.IO برای مدیریت فایل‌ها استفاده می‌کند که شامل کلاس‌ها و متدهای مفیدی مانند File, Stream, FileStream, و StreamReader/StreamWriter است.

ابزارها و کلاس‌های کلیدی در System.IO

  • File و FileInfo

این دو کلاس برای انجام عملیات اصلی بر روی فایل‌ها استفاده می‌شوند.

کلاس File متدهای استاتیک ارائه می‌دهد، در حالی که FileInfo متدهای مشابهی را به صورت غیراستاتیک فراهم می‌کند.

برخی از متدهای مهم عبارتند از:

    • File.Create(path): ایجاد یک فایل جدید.

    • File.Exists(path): بررسی وجود فایل.

    • File.Delete(path): حذف فایل.

    • File.ReadAllText(path): خواندن تمام محتوای فایل به صورت متن.

    • File.WriteAllText(path, content): نوشتن متن در فایل.

  • FileStream

کلاس FileStream دسترسی سطح پایین به فایل‌ها را فراهم می‌کند.
این کلاس امکان خواندن و نوشتن داده‌ها را به صورت بایت به بایت فراهم کرده و برای عملیات پیشرفته‌تر مفید است.

مثال:

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string path = "example.txt";

        // نوشتن در فایل با FileStream
        using (FileStream fs = new FileStream(path, FileMode.Create))
        {
            byte[] data = System.Text.Encoding.UTF8.GetBytes("Hello, FileStream!");
            fs.Write(data, 0, data.Length);
        }

        // خواندن از فایل با FileStream
        using (FileStream fs = new FileStream(path, FileMode.Open))
        {
            byte[] buffer = new byte[fs.Length];
            fs.Read(buffer, 0, buffer.Length);
            string content = System.Text.Encoding.UTF8.GetString(buffer);
            Console.WriteLine(content);
        }
    }
}
  • StreamReader و StreamWriter

این دو کلاس برای خواندن و نوشتن داده‌ها به صورت کارآمد و در سطح بالا استفاده می‌شوند. آن‌ها بر اساس متن کار می‌کنند و برای خواندن یا نوشتن داده‌های رشته‌ای مناسب هستند.

مثال:

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string path = "example.txt";

        // نوشتن با StreamWriter
        using (StreamWriter writer = new StreamWriter(path))
        {
            writer.WriteLine("Hello, StreamWriter!");
        }

        // خواندن با StreamReader
        using (StreamReader reader = new StreamReader(path))
        {
            string content = reader.ReadToEnd();
            Console.WriteLine(content);
        }
    }
}

 

ابزارها و کلاس‌های کلیدی در System.IO

 

ورودی/خروجی همزمان (Synchronous I/O)

در مدل ورودی/خروجی همزمان، عملیات فایل به صورت متوالی انجام می‌شود.

این بدان معناست که هنگام اجرای یک عملیات ورودی/خروجی، برنامه منتظر می‌ماند تا عملیات کامل شود و سپس به اجرای خطوط بعدی کد ادامه می‌دهد.

این مدل ساده‌تر است اما در شرایطی که عملیات زمان‌بر است (مانند خواندن یا نوشتن فایل‌های بزرگ)، ممکن است عملکرد برنامه را کاهش دهد.

مثال ساده از ورودی/خروجی همزمان

using System;
using System.IO;

class Program
{
    static void Main()
    {
        string path = "example.txt";

        // نوشتن همزمان
        File.WriteAllText(path, "Synchronous I/O Example");

        // خواندن همزمان
        string content = File.ReadAllText(path);
        Console.WriteLine(content);
    }
}

معایب ورودی/خروجی همزمان

  • کاهش کارایی

    در عملیات سنگین یا زمان‌بر، پردازنده منتظر می‌ماند.
  • عدم پاسخگویی

    در برنامه‌های رابط کاربری (GUI)، این موضوع می‌تواند باعث قفل شدن برنامه شود.

 

 

🌟 آیا به دنبال یک فرصت عالی برای یادگیری برنامه‌نویسی هستید؟ 🚀

با دوره آموزشی سی‌شارپ ما، شما می‌توانید مهارت‌های خود را به سطح جدیدی ارتقا دهید! این دوره به‌طور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامه‌نویسی سی‌شارپ پیش بروید.

👨‍🏫 چرا دوره ما را انتخاب کنید؟

  • محتوای جامع و عملی: با پروژه‌های واقعی و تمرینات عملی، یادگیری را به تجربه‌ای جذاب تبدیل کنید.
  • مدرس مجرب: از تجربه و دانش مدرس حرفه‌ای بهره‌مند شوید که شما را در هر مرحله از یادگیری راهنمایی می‌کنند.
  • پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
  • دسترسی مادام‌العمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، می‌توانید به آن مراجعه کنید.

💡 فرصت را از دست ندهید!

بایادگیری سی‌شارپ، می‌توانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژه‌های جذاب و چالش‌برانگیز شرکت کنید.

همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده‌ای روشن‌تر بردارید!

شرکت در دوره آموزش برنامه نویسی سی شارپ

 

 

ورودی/خروجی غیرهمزمان (Asynchronous I/O)

ورودی/خروجی غیرهمزمان به برنامه این امکان را می‌دهد که عملیات I/O را بدون مسدود کردن اجرای سایر بخش‌های برنامه انجام دهد.

این مدل از کلمات کلیدی async و await در سی‌شارپ استفاده می‌کند و مناسب برنامه‌های تحت شبکه یا برنامه‌هایی با نیاز به عملکرد بالا است.

مزایای ورودی/خروجی غیرهمزمان

  • کارایی بهتر

    پردازنده می‌تواند به اجرای سایر وظایف ادامه دهد.
  • پاسخگویی بالا

    در برنامه‌های GUI یا وب‌، از قفل شدن جلوگیری می‌کند.

مثال از ورودی/خروجی غیرهمزمان

using System;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        string path = "example.txt";

        // نوشتن غیرهمزمان
        await File.WriteAllTextAsync(path, "Asynchronous I/O Example");

        // خواندن غیرهمزمان
        string content = await File.ReadAllTextAsync(path);
        Console.WriteLine(content);
    }
}

 

 

مزایای ورودی/خروجی غیرهمزمان

تفاوت‌های کلیدی میان ورودی/خروجی همزمان و غیرهمزمان

  • ورودی/خروجی همزمان

    مدل اجرا متوالی،کارایی کاهش در بارهای سنگین،پیچیدگی پیاده‌سازی ساده،پاسخگویی احتمال قفل شدن
  • ورودی/خروجی غیرهمزمان

      مدل اجرا موازی یا هم‌زمان ،کارایی بهینه در بارهای سنگین ،پیچیدگی پیاده‌سازی پیچیده‌تر،پاسخگویی بدون قفل شدن

 

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

  • مدیریت استثناها

    هنگام کار با فایل‌ها، همیشه احتمال بروز استثنا وجود دارد (مثلاً فایل موجود نیست). از بلوک try-catch استفاده کنید.
try
{
    string content = File.ReadAllText("nonexistent.txt");
}
catch (FileNotFoundException ex)
{
    Console.WriteLine("File not found: " + ex.Message);
}

 

  • استفاده از using

    برای مدیریت منابع و بستن فایل‌ها به صورت خودکار، از بلوک using استفاده کنید.
  • انتخاب مدل مناسب I/O

    اگر عملیات ساده و سریع است، از I/O همزمان استفاده کنید. در موارد پیچیده و زمان‌بر، مدل غیرهمزمان مناسب‌تر است.
  • اجتناب از دسترسی همزمان

    در صورت نیاز به دسترسی همزمان چندین بخش از برنامه به فایل، از قفل‌گذاری یا مکانیزم‌های همگام‌سازی استفاده کنید.

 

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

 

مثال پروژه محور ورودی/ خروجی فایل در سی شارپ

مثال پروژه محور: برنامه ساده مدیریت یادداشت‌ها
این برنامه یادداشت‌های متنی را ذخیره، خوانده و حذف می‌کند.

کد:

using System;
using System.IO;
using System.Threading.Tasks;

class NoteManager
{
    static string notesDirectory = "Notes";

    static async Task Main()
    {
        Directory.CreateDirectory(notesDirectory);

        Console.WriteLine("1. ایجاد یادداشت");
        Console.WriteLine("2. خواندن یادداشت");
        Console.WriteLine("3. حذف یادداشت");
        Console.Write("انتخاب کنید: ");
        string choice = Console.ReadLine();

        switch (choice)
        {
            case "1":
                await CreateNoteAsync();
                break;
            case "2":
                await ReadNoteAsync();
                break;
            case "3":
                DeleteNote();
                break;
            default:
                Console.WriteLine("انتخاب نامعتبر.");
                break;
        }
    }

    static async Task CreateNoteAsync()
    {
        Console.Write("عنوان: ");
        string title = Console.ReadLine();
        Console.Write("محتوا: ");
        string content = Console.ReadLine();
        string filePath = Path.Combine(notesDirectory, title + ".txt");

        await File.WriteAllTextAsync(filePath, content);
        Console.WriteLine("یادداشت ذخیره شد.");
    }

    static async Task ReadNoteAsync()
    {
        Console.Write("عنوان: ");
        string title = Console.ReadLine();
        string filePath = Path.Combine(notesDirectory, title + ".txt");

        if (File.Exists(filePath))
        {
            string content = await File.ReadAllTextAsync(filePath);
            Console.WriteLine($"محتوا:\n{content}");
        }
        else
        {
            Console.WriteLine("یادداشت یافت نشد.");
        }
    }

    static void DeleteNote()
    {
        Console.Write("عنوان: ");
        string title = Console.ReadLine();
        string filePath = Path.Combine(notesDirectory, title + ".txt");

        if (File.Exists(filePath))
        {
            File.Delete(filePath);
            Console.WriteLine("یادداشت حذف شد.");
        }
        else
        {
            Console.WriteLine("یادداشت یافت نشد.");
        }
    }
}


ویژگی‌ها:

ذخیره یادداشت: با استفاده از File.WriteAllTextAsync.
خواندن یادداشت: نمایش محتوای فایل با File.ReadAllTextAsync.
حذف یادداشت: حذف فایل با File.Delete.


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

محصولات مرتبط

کاربران ما

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

برای ارسال نظر لطفا ورود یا ثبت نام کنید

منو