फाइल कॉपी करने के लिए, C# File.Copy मेथड प्रदान करता है।
File.Copy के 2 ओवरलोड्स हैं:
- Copy(String, String) - मौजूदा फाइल को नई फाइल में कॉपी करता है। समान नाम की फाइल को ओवरराइट करने की अनुमति नहीं है।
- Copy(String, String, Boolean) - मौजूदा फाइल को नई फाइल में कॉपी करता है।
overwriteपैरामीटर के साथ समान नाम की फाइल को ओवरराइट करने की अनुमति देता है।
Directory.GetFiles निर्दिष्ट खोज पैटर्न से मेल खाने वाली सभी फाइलों के नाम (उनके पथ सहित) लौटाता है, और वैकल्पिक रूप से सबडायरेक्टरीज़ को खोजता है।
उदाहरण: एक फोल्डर से दूसरे में सभी फाइल्स कॉपी करें
using System;
using System.IO;
static void Main(string[] args)
{
string sourcePath = @"C:\Users\Koushik\Desktop\TestFolder\TestFolderMain1";
string destinationPath = @"C:\Users\Koushik\Desktop\TestFolder\TestFolderMain2\";
Console.WriteLine("-------------Source Folder-------------");
var sourceFiles = Directory.GetFiles(sourcePath, "*.*", SearchOption.TopDirectoryOnly);
foreach (string file in sourceFiles)
{
Console.WriteLine(file);
}
Console.WriteLine("-------------Destination Folder Before Copying-------------");
var destFilesBefore = Directory.GetFiles(destinationPath, "*.*", SearchOption.TopDirectoryOnly);
foreach (string file in destFilesBefore)
{
Console.WriteLine(file);
}
// सभी फाइल्स कॉपी करें
string[] files = Directory.GetFiles(sourcePath);
foreach (string file in files)
{
string destFile = Path.Combine(destinationPath, Path.GetFileName(file));
File.Copy(file, destFile, overwrite: true); // ओवरराइट सक्षम
Console.WriteLine($"Copied: {Path.GetFileName(file)}");
}
Console.WriteLine("-------------After Copying-------------");
var destFilesAfter = Directory.GetFiles(destinationPath, "*.*", SearchOption.TopDirectoryOnly);
foreach (string file in destFilesAfter)
{
Console.WriteLine(file);
}
Console.ReadLine();
}
आउटपुट
-------------Source Folder-------------
C:\Users\Koushik\Desktop\TestFolder\TestFolderMain1\TestFolderMain1.txt
-------------Destination Folder Before Copying-------------
C:\Users\Koushik\Desktop\TestFolder\TestFolderMain2\TestFolderMain2.txt
-------------After Copying-------------
C:\Users\Koushik\Desktop\TestFolder\TestFolderMain2\TestFolderMain1.txt
C:\Users\Koushik\Desktop\TestFolder\TestFolderMain2\TestFolderMain2.txt
आम परिदृश्य और पैटर्न
1. सिंगल फाइल कॉपी (ओवरराइट के साथ)
File.Copy(sourcePath, destPath, overwrite: true);
2. सबडायरेक्टरीज़ सहित रिकर्सिव कॉपी
public static void CopyDirectory(string sourceDir, string destDir, bool recursive = true)
{
Directory.CreateDirectory(destDir);
foreach (string file in Directory.GetFiles(sourceDir))
{
string destFile = Path.Combine(destDir, Path.GetFileName(file));
File.Copy(file, destFile, true);
}
if (recursive)
{
foreach (string dir in Directory.GetDirectories(sourceDir))
{
string destSubDir = Path.Combine(destDir, Path.GetFileName(dir));
CopyDirectory(dir, destSubDir, true);
}
}
}
3. प्रोग्रेस के साथ एसिंक कॉपी (.NET 6+)
public static async Task CopyFileAsync(string source, string destination,
IProgress<double> progress = null, CancellationToken ct = default)
{
using var sourceStream = File.OpenRead(source);
using var destStream = File.Create(destination);
var buffer = new byte[81920]; // 80KB बफर
long totalBytes = sourceStream.Length;
long copiedBytes = 0;
int bytesRead;
while ((bytesRead = await sourceStream.ReadAsync(buffer, ct)) > 0)
{
await destStream.WriteAsync(buffer.AsMemory(0, bytesRead), ct);
copiedBytes += bytesRead;
progress?.Report((double)copiedBytes / totalBytes * 100);
}
}
4. फाइल मूव (कॉपी + डिलीट)
// परमाणु मूव (समान वॉल्यूम पर)
File.Move(sourcePath, destPath, overwrite: true);
// क्रॉस-वॉल्यूम (कॉपी फिर डिलीट)
File.Copy(sourcePath, destPath, true);
File.Delete(sourcePath);
एक्सेप्शन हैंडलिंग
try
{
File.Copy(source, dest, true);
}
catch (FileNotFoundException)
{
Console.WriteLine("Source file not found");
}
catch (DirectoryNotFoundException)
{
Console.WriteLine("Directory not found");
}
catch (UnauthorizedAccessException)
{
Console.WriteLine("Access denied");
}
catch (IOException ex) when (ex.HResult == 0x80070020) // ERROR_SHARING_VIOLATION
{
Console.WriteLine("File is in use by another process");
}
catch (PathTooLongException)
{
Console.WriteLine("Path too long");
}
मुख्य बिंदु
- हमेशा पथ संयोजन के लिए
Path.Combineका उपयोग करें - ओवरराइट व्यवहार के लिए
overwrite: trueनिर्दिष्ट करें - गंतव्य डायरेक्टरी मौजूद है यह सुनिश्चित करने के लिए
Directory.CreateDirectoryका उपयोग करें - बड़ी फाइल्स/नेटवर्क कॉपी के लिए एसिंक संस्करण पर विचार करें
- मजबूत एक्सेप्शन हैंडलिंग लागू करें