"

 چگونه در سی شارپ فایل را کپی کنیم,کپی با قابلیت بازنویسی (Overwrite) در سی شارپ,استفاده از متد File.Copy در سی شارپ

چگونه در سی شارپ فایل را کپی کنیم؟

در سی شارپ با متد File.Copy در فضای نام System.IO فایل را کپی می‌کنند. پارامتر سوم true یعنی بازنویسی فایل مقصد.

تیم تحریریه
17
0
24 اردیبهشت 1405
لینک کوتاه

چگونه در سی شارپ فایل را کپی کنیم؟

در برنامه‌نویسی روزمره با سی شارپ، نیاز به کپی کردن فایل‌ها یکی از کارهای رایجی است که بارها با آن مواجه می‌شوید.
چه در حال توسعه یک برنامه مدیریت فایل باشید، چه در حال نوشتن یک ابزار پشتیبان‌گیری ساده، آشنایی با روش‌های کپی کردن فایل در سی شارپ یک مهارت ضروری است. 

فضای نام System.IO و کلاس File در سی شارپ

قبل از هر اقدامی، باید با کلاس File در فضای نام System.IO آشنا شوید.
این کلاس شامل متدهای استاتیکی است که برای انجام عملیات مختلف روی فایل‌ها مانند کپی، جابجایی، حذف و بررسی وجود فایل استفاده می‌شود.
برای استفاده از این امکانات، کافی است ابتدا فضای نام مربوطه را به پروژه خود اضافه کنید:

using System.IO;
حالا آماده‌اید تا اولین فایل خود را کپی کنید.



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

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

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

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

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

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

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

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





استفاده از متد File.Copy در سی شارپ

ساده‌ترین و مستقیم‌ترین راه برای کپی کردن یک فایل در سی شارپ، استفاده از متد File.Copy است.
این متد دو پارامتر اصلی دارد: مسیر فایل مبدا و مسیر فایل مقصد.

کپی ساده (بدون اجازه بازنویسی)

string sourceFile = @"C:\MyFolder\source.txt";
string destFile = @"C:\MyFolder\destination.txt";

File.Copy(sourceFile, destFile);
Console.WriteLine("فایل با موفقیت کپی شد.");

اگر فایل مقصد از قبل وجود داشته باشد، کد بالا یک استثنا (Exception) از نوع IOException ایجاد می‌کند و برنامه متوقف می‌شود.


استفاده از متد File.Copy در سی شارپ


کپی با قابلیت بازنویسی (Overwrite) در سی شارپ

برای حل مشکل بالا و اجازه بازنویسی فایل مقصد، از نسخه سومین پارامتر متد File.Copy استفاده می‌کنیم - یک مقدار boolean که اگر true باشد، اجازه بازنویسی فایل موجود را می‌دهد:

string sourceFile = @"C:\MyFolder\source.txt";
string destFile = @"C:\MyFolder\destination.txt";

// true یعنی اگر فایل مقصد موجود بود، آن را بازنویسی کن
File.Copy(sourceFile, destFile, true);
Console.WriteLine("فایل کپی شد (در صورت وجود، بازنویسی شد).");

این روش امن‌ترین و رایج‌ترین روش کپی فایل در سی شارپ است.


مدیریت خطاها (Exception Handling) در سی شارپ

هنگام کار با فایل‌ها، همیشه احتمال بروز خطا وجود دارد.
فایل مبدا ممکن است وجود نداشته باشد، مسیر مقصد نامعتبر باشد، یا کاربر دسترسی کافی نداشته باشد.
برای این که برنامه شما از کار نیفتد، بهتر است کد کپی را در یک بلوک try-catch قرار دهید:


using System;
using System.IO;

class Program
{
    static void Main()
    {
        string sourceFile = @"C:\source\myfile.txt";
        string destFile = @"C:\destination\myfile.txt";

        try
        {
            // بررسی وجود فایل مبدا قبل از کپی (اختیاری اما مفید)
            if (!File.Exists(sourceFile))
            {
                Console.WriteLine("خطا: فایل مبدا وجود ندارد.");
                return;
            }

            // عملیات کپی
            File.Copy(sourceFile, destFile, true);
            Console.WriteLine("فایل با موفقیت کپی شد.");
        }
        catch (UnauthorizedAccessException ex)
        {
            Console.WriteLine("خطای دسترسی: " + ex.Message);
        }
        catch (IOException ex)
        {
            Console.WriteLine("خطای ورودی/خروجی: " + ex.Message);
        }
        catch (Exception ex)
        {
            Console.WriteLine("خطای عمومی: " + ex.Message);
        }
    }
}

برخی از خطاهای رایجی که ممکن است با آنها مواجه شوید عبارتند از:


نوع خطا  علت
FileNotFoundException فایل مبدا وجود ندارد
DirectoryNotFoundException مسیر مقصد نامعتبر است
IOException   فایل مقصد وجود دارد و overwrite برابر false است
UnauthorizedAccessException دسترسی به فایل یا پوشه مجاز نیست


کپی کردن فایل با استفاده از Stream (جریان‌ها) در سی  شارپ

در سناریوهای پیشرفته‌تر، مثلاً زمانی که می‌خواهید هنگام کپی کردن، پیشرفت عملیات را نمایش دهید یا فایل‌های بزرگ را بهینه کپی کنید، می‌توانید از کلاس‌های FileStream استفاده کنید.

public static void CopyFileWithProgress(string sourcePath, string destPath)
{
    const int bufferSize = 81920; // 80KB بافر - اندازه مناسب برای کپی
    byte[] buffer = new byte[bufferSize];
    
    using (FileStream source = new FileStream(sourcePath, FileMode.Open, FileAccess.Read))
    using (FileStream dest = new FileStream(destPath, FileMode.Create, FileAccess.Write))
    {
        int bytesRead;
        long totalBytes = source.Length;
        long bytesWritten = 0;
        
        while ((bytesRead = source.Read(buffer, 0, bufferSize)) > 0)
        {
            dest.Write(buffer, 0, bytesRead);
            bytesWritten += bytesRead;
            
            // محاسبه درصد پیشرفت (اختیاری)
            int progress = (int)((double)bytesWritten / totalBytes * 100);
            Console.WriteLine($"پیشرفت کپی: {progress}%");
        }
    }
}

این روش به شما کنترل کامل روی فرآیند کپی می‌دهد و برای کپی کردن فایل‌های حجیم (چند گیگابایتی) بسیار مناسب است.



کپی کردن فایل با حفظ تاریخچه (File.Copy با تنظیمات زمان)

متد File.Copy به طور خودکار زمان ایجاد و تغییر فایل مقصد را به زمان فعلی تنظیم می‌کند.
اگر می‌خواهید زمان‌های اصلی فایل مبدا حفظ شود، باید آن‌ها را به صورت دستی کپی کنید:
public static void CopyFilePreserveMetadata(string sourcePath, string destPath, bool overwrite)
{
    // کپی فایل
    File.Copy(sourcePath, destPath, overwrite);
    
    // حفظ زمان آخرین تغییر (LastWriteTime)
    DateTime lastWriteTime = File.GetLastWriteTime(sourcePath);
    File.SetLastWriteTime(destPath, lastWriteTime);
    
    // حفظ زمان ایجاد (CreationTime)
    DateTime creationTime = File.GetCreationTime(sourcePath);
    File.SetCreationTime(destPath, creationTime);
}



کپی کردن چند فایل با هم (دسته‌جمعی) در سی شارپ

برای کپی کردن یک گروه از فایل‌ها (مثلاً همه فایل‌های متنی یک پوشه)، می‌توانید از متدهای Directory.GetFiles و یک حلقه استفاده کنید.

کپی همه فایل‌های یک پوشه با پسوند مشخص

public static void CopyAllFilesWithExtension(string sourceFolder, string destFolder, string extension)
{
    // اطمینان از وجود پوشه مقصد
    Directory.CreateDirectory(destFolder);
    
    // دریافت همه فایل‌های با پسوند مشخص از پوشه مبدا
    string[] files = Directory.GetFiles(sourceFolder, $"*.{extension}", SearchOption.TopDirectoryOnly);
    
    foreach (string file in files)
    {
        string fileName = Path.GetFileName(file);
        string destPath = Path.Combine(destFolder, fileName);
        
        File.Copy(file, destPath, true);
        Console.WriteLine($"کپی شد: {fileName}");
    }
}

// فراخوانی برای کپی همه فایل‌های txt از پوشه Logs
CopyAllFilesWithExtension(@"C:\Logs", @"C:\Logs_Backup", "txt");


کپی کردن چند فایل با هم (دسته‌جمعی) در سی شارپ


کپی همه فایل‌ها به صورت بازگشتی (شامل زیرپوشه‌ها)

public static void CopyAllFilesRecursive(string sourceDir, string destDir)
{
    // ایجاد پوشه مقصد در صورت نبودن
    Directory.CreateDirectory(destDir);
    
    // کپی همه فایل‌های پوشه جاری
    foreach (string file in Directory.GetFiles(sourceDir))
    {
        string fileName = Path.GetFileName(file);
        string destPath = Path.Combine(destDir, fileName);
        File.Copy(file, destPath, true);
    }
    
    // کپی بازگشتی زیرپوشه‌ها
    foreach (string subDir in Directory.GetDirectories(sourceDir))
    {
        string dirName = Path.GetFileName(subDir);
        string destSubDir = Path.Combine(destDir, dirName);
        CopyAllFilesRecursive(subDir, destSubDir);
    }
}


تفاوت File.Copy و File.Move در سی شارپ

گاهی ممکن است نیاز به جابجایی (Move) یک فایل داشته باشید به جای کپی کردن. تفاوت اصلی در این است:

  • File.Copy: یک نسخه جدید از فایل می‌سازد و فایل اصلی را حفظ می‌کند.
  • File.Move: فایل اصلی را به مکان جدید منتقل می‌کند و دیگر در مسیر قبلی وجود ندارد.
// کپی کردن - فایل اصلی همچنان در مسیر اول وجود دارد
File.Copy(@"C:\source\file.txt", @"C:\dest\file.txt");

// جابجایی - فایل اصلی حذف می‌شود
File.Move(@"C:\source\file.txt", @"C:\dest\file.txt");

تفاوت File.Copy و File.Move در سی شارپ



جمع‌بندی: کدام روش را انتخاب کنیم؟

سناریو روش پیشنهادی
کپی یک فایل ساده     File.Copy(path1, path2, true)
نیاز به نمایش پیشرفت کپی  استفاده از FileStream و بافر
کپی فایل‌های حساس با احتیاط بالا     File.Copy در بلوک try-catch
کپی چند فایل با هم   حلقه foreach روی Directory.GetFiles
حفظ تاریخچه فایل کپی دستوری CreationTime و LastWriteTime

    
در سی شارپ، ساده‌ترین و مطمئن‌ترین روش برای کپی کردن فایل، استفاده از متد File.Copy است.
با اضافه کردن پارامتر true در جای درست، می‌توانید از بروز خطاهای ناخواسته جلوگیری کنید.
برای کارهای حرفه‌ای‌تر مانند کپی فایل‌های حجیم یا نمایش پیشرفت، از FileStream استفاده کنید.
بعضی از سناریوها مثل کپی فایل‌های باز (open files) نیاز به روش‌های پیشرفته‌تری دارند .

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

کاربران ما

شما هم نظرتون با ما دریاره “چگونه در سی شارپ فایل را کپی کنیم؟” اشتراک بزارید

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

منو