Поделиться через


File.Copy Метод

Определение

Копирует существующий файл в новый файл.

Перегрузки

Copy(String, String)

Копирует существующий файл в новый файл. Перезапись файла с тем же именем запрещена.

Copy(String, String, Boolean)

Копирует существующий файл в новый файл. Допускается перезапись файла с тем же именем.

Copy(String, String)

Исходный код:
File.cs
Исходный код:
File.cs
Исходный код:
File.cs

Копирует существующий файл в новый файл. Перезапись файла с тем же именем запрещена.

public:
 static void Copy(System::String ^ sourceFileName, System::String ^ destFileName);
public static void Copy (string sourceFileName, string destFileName);
static member Copy : string * string -> unit
Public Shared Sub Copy (sourceFileName As String, destFileName As String)

Параметры

sourceFileName
String

Файл для копирования.

destFileName
String

Имя целевого файла. Это не может быть каталог или существующий файл.

Исключения

Вызывающий объект не имеет требуемого разрешения.

sourceFileName или destFileName представляет собой строку нулевой длины, содержит только пробелы или содержит один или несколько недопустимых символов. Вы можете запросить недопустимые символы с помощью метода GetInvalidPathChars().

-или-

sourceFileName или destFileName указывает каталог.

sourceFileName или destFileNamenull.

Указанный путь, имя файла или оба превышают определенную системой максимальную длину.

Путь, указанный в sourceFileName или destFileName, является недопустимым (например, он находится на несопоставленном диске).

sourceFileName не найден.

destFileName существует.

-или-

Произошла ошибка ввода-вывода.

sourceFileName или destFileName имеет недопустимый формат.

Примеры

В следующем примере файлы копируются в папку резервного копирования C:\archives\2008. В нем используются две перегрузки метода Copy следующим образом:

  • Сначала он использует перегрузку метода File.Copy(String, String) для копирования текстовых (.txt) файлов. В коде показано, что эта перегрузка не позволяет перезаписывать файлы, которые уже были скопированы.

  • Затем он использует перегрузку метода File.Copy(String, String, Boolean) для копирования изображений (.jpg файлов). В коде показано, что эта перегрузка позволяет перезаписывать файлы, которые уже были скопированы.

string sourceDir = @"c:\current";
string backupDir = @"c:\archives\2008";

try
{
    string[] picList = Directory.GetFiles(sourceDir, "*.jpg");
    string[] txtList = Directory.GetFiles(sourceDir, "*.txt");

    // Copy picture files.
    foreach (string f in picList)
    {
        // Remove path from the file name.
        string fName = f.Substring(sourceDir.Length + 1);

        // Use the Path.Combine method to safely append the file name to the path.
        // Will overwrite if the destination file already exists.
        File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName), true);
    }

    // Copy text files.
    foreach (string f in txtList)
    {

        // Remove path from the file name.
        string fName = f.Substring(sourceDir.Length + 1);

        try
        {
            // Will not overwrite if the destination file already exists.
            File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName));
        }

        // Catch exception if the file was already copied.
        catch (IOException copyError)
        {
            Console.WriteLine(copyError.Message);
        }
    }

    // Delete source files that were copied.
    foreach (string f in txtList)
    {
        File.Delete(f);
    }
    foreach (string f in picList)
    {
        File.Delete(f);
    }
}

catch (DirectoryNotFoundException dirNotFound)
{
    Console.WriteLine(dirNotFound.Message);
}
let sourceDir = @"c:\current"
let backupDir = @"c:\archives\2008"

try
    let picList = Directory.GetFiles(sourceDir, "*.jpg")
    let txtList = Directory.GetFiles(sourceDir, "*.txt")

    // Copy picture files.
    for f in picList do
        // Remove path from the file name.
        let fName = f.Substring(sourceDir.Length + 1)

        // Use the Path.Combine method to safely append the file name to the path.
        // Will overwrite if the destination file already exists.
        File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName), true)

    // Copy text files.
    for f in txtList do
        // Remove path from the file name.
        let fName = f.Substring(sourceDir.Length + 1)

        try
            // Will not overwrite if the destination file already exists.
            File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName))

        // Catch exception if the file was already copied.
        with
        | :? IOException as copyError -> printfn $"{copyError.Message}"

    // Delete source files that were copied.
    for f in txtList do
        File.Delete f

    for f in picList do
        File.Delete f

// Catch exception if the file was already copied.
with
| :? DirectoryNotFoundException as dirNotFound -> printfn $"{dirNotFound.Message}"
Dim sourceDir As String = "c:\current"
Dim backupDir As String = "c:\archives\2008"

Try
    Dim picList As String() = Directory.GetFiles(sourceDir, "*.jpg")
    Dim txtList As String() = Directory.GetFiles(sourceDir, "*.txt")

    ' Copy picture files.
    For Each f As String In picList
        'Remove path from the file name.
        Dim fName As String = f.Substring(sourceDir.Length + 1)

        ' Use the Path.Combine method to safely append the file name to the path.
        ' Will overwrite if the destination file already exists.
        File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName), True)
    Next

    ' Copy text files.
    For Each f As String In txtList

        'Remove path from the file name.
        Dim fName As String = f.Substring(sourceDir.Length + 1)

        Try
            ' Will not overwrite if the destination file already exists.
            File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName))

            ' Catch exception if the file was already copied.
        Catch copyError As IOException
            Console.WriteLine(copyError.Message)
        End Try
    Next

    For Each f As String In txtList
        File.Delete(f)
    Next

    For Each f As String In picList
        File.Delete(f)
    Next

Catch dirNotFound As DirectoryNotFoundException
    Console.WriteLine(dirNotFound.Message)
End Try

Комментарии

Этот метод эквивалентен перегрузке метода Copy(String, String, Boolean) с параметром overwrite, равным false.

Параметры sourceFileName и destFileName могут указывать относительные или абсолютные сведения о пути. Относительные сведения о пути интерпретируются как относительные к текущему рабочему каталогу. Чтобы получить текущий рабочий каталог, см. метод Directory.GetCurrentDirectory. Этот метод не поддерживает подстановочные знаки в параметрах.

Атрибуты исходного файла сохраняются в скопированном файле.

См. также раздел

Применяется к

Copy(String, String, Boolean)

Исходный код:
File.cs
Исходный код:
File.cs
Исходный код:
File.cs

Копирует существующий файл в новый файл. Допускается перезапись файла с тем же именем.

public:
 static void Copy(System::String ^ sourceFileName, System::String ^ destFileName, bool overwrite);
public static void Copy (string sourceFileName, string destFileName, bool overwrite);
static member Copy : string * string * bool -> unit
Public Shared Sub Copy (sourceFileName As String, destFileName As String, overwrite As Boolean)

Параметры

sourceFileName
String

Файл для копирования.

destFileName
String

Имя целевого файла. Это не может быть каталогом.

overwrite
Boolean

true, если целевой файл должен быть заменен, если он уже существует; в противном случае false.

Исключения

Вызывающий объект не имеет требуемого разрешения.

-или-

destFileName доступно только для чтения.

-или-

overwrite true, destFileName существует и скрыт, но sourceFileName не скрыт.

sourceFileName или destFileName представляет собой строку нулевой длины, содержит только пробелы или содержит один или несколько недопустимых символов. Вы можете запросить недопустимые символы с помощью метода GetInvalidPathChars().

-или-

sourceFileName или destFileName указывает каталог.

sourceFileName или destFileNamenull.

Указанный путь, имя файла или оба превышают определенную системой максимальную длину.

Путь, указанный в sourceFileName или destFileName, является недопустимым (например, он находится на несопоставленном диске).

sourceFileName не найден.

destFileName существует и overwritefalse.

-или-

Произошла ошибка ввода-вывода.

sourceFileName или destFileName имеет недопустимый формат.

Примеры

В следующем примере файлы копируются в папку резервного копирования C:\archives\2008. В нем используются две перегрузки метода Copy следующим образом:

  • Сначала он использует перегрузку метода File.Copy(String, String) для копирования текстовых (.txt) файлов. В коде показано, что эта перегрузка не позволяет перезаписывать файлы, которые уже были скопированы.

Затем он использует перегрузку метода File.Copy(String, String, Boolean) для копирования изображений (.jpg файлов). В коде показано, что эта перегрузка позволяет перезаписывать файлы, которые уже были скопированы.

string sourceDir = @"c:\current";
string backupDir = @"c:\archives\2008";

try
{
    string[] picList = Directory.GetFiles(sourceDir, "*.jpg");
    string[] txtList = Directory.GetFiles(sourceDir, "*.txt");

    // Copy picture files.
    foreach (string f in picList)
    {
        // Remove path from the file name.
        string fName = f.Substring(sourceDir.Length + 1);

        // Use the Path.Combine method to safely append the file name to the path.
        // Will overwrite if the destination file already exists.
        File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName), true);
    }

    // Copy text files.
    foreach (string f in txtList)
    {

        // Remove path from the file name.
        string fName = f.Substring(sourceDir.Length + 1);

        try
        {
            // Will not overwrite if the destination file already exists.
            File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName));
        }

        // Catch exception if the file was already copied.
        catch (IOException copyError)
        {
            Console.WriteLine(copyError.Message);
        }
    }

    // Delete source files that were copied.
    foreach (string f in txtList)
    {
        File.Delete(f);
    }
    foreach (string f in picList)
    {
        File.Delete(f);
    }
}

catch (DirectoryNotFoundException dirNotFound)
{
    Console.WriteLine(dirNotFound.Message);
}
let sourceDir = @"c:\current"
let backupDir = @"c:\archives\2008"

try
    let picList = Directory.GetFiles(sourceDir, "*.jpg")
    let txtList = Directory.GetFiles(sourceDir, "*.txt")

    // Copy picture files.
    for f in picList do
        // Remove path from the file name.
        let fName = f.Substring(sourceDir.Length + 1)

        // Use the Path.Combine method to safely append the file name to the path.
        // Will overwrite if the destination file already exists.
        File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName), true)

    // Copy text files.
    for f in txtList do
        // Remove path from the file name.
        let fName = f.Substring(sourceDir.Length + 1)

        try
            // Will not overwrite if the destination file already exists.
            File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName))

        // Catch exception if the file was already copied.
        with
        | :? IOException as copyError -> printfn $"{copyError.Message}"

    // Delete source files that were copied.
    for f in txtList do
        File.Delete f

    for f in picList do
        File.Delete f

// Catch exception if the file was already copied.
with
| :? DirectoryNotFoundException as dirNotFound -> printfn $"{dirNotFound.Message}"
Dim sourceDir As String = "c:\current"
Dim backupDir As String = "c:\archives\2008"

Try
    Dim picList As String() = Directory.GetFiles(sourceDir, "*.jpg")
    Dim txtList As String() = Directory.GetFiles(sourceDir, "*.txt")

    ' Copy picture files.
    For Each f As String In picList
        'Remove path from the file name.
        Dim fName As String = f.Substring(sourceDir.Length + 1)

        ' Use the Path.Combine method to safely append the file name to the path.
        ' Will overwrite if the destination file already exists.
        File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName), True)
    Next

    ' Copy text files.
    For Each f As String In txtList

        'Remove path from the file name.
        Dim fName As String = f.Substring(sourceDir.Length + 1)

        Try
            ' Will not overwrite if the destination file already exists.
            File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName))

            ' Catch exception if the file was already copied.
        Catch copyError As IOException
            Console.WriteLine(copyError.Message)
        End Try
    Next

    For Each f As String In txtList
        File.Delete(f)
    Next

    For Each f As String In picList
        File.Delete(f)
    Next

Catch dirNotFound As DirectoryNotFoundException
    Console.WriteLine(dirNotFound.Message)
End Try

Комментарии

Параметры sourceFileName и destFileName могут указывать относительные или абсолютные сведения о пути. Относительные сведения о пути интерпретируются как относительные к текущему рабочему каталогу. Этот метод не поддерживает подстановочные знаки в параметрах.

Атрибуты исходного файла сохраняются в скопированном файле.

Список распространенных задач ввода-вывода см. в разделе Распространенные задачи ввода-вывода.

См. также раздел

Применяется к