File.Copy 方法

定義

複製現有的檔案到新的檔案。

多載

Copy(String, String, Boolean)

複製現有的檔案到新的檔案。 允許覆寫相同名稱的檔案。

Copy(String, String)

複製現有的檔案到新的檔案。 不允許覆寫相同名稱的檔案。

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 是唯讀的。

-或-

overwritetruedestFileName 存在且為隱藏,但 sourceFileName 不會隱藏。

sourceFileNamedestFileName 為零長度字串,只包含空格或包含一或多個無效字元。 您可以使用 GetInvalidPathChars() 方法查詢無效字元。

-或-

sourceFileNamedestFileName 會指定目錄。

sourceFileNamedestFileNamenull

指定的路徑、檔案名稱,或兩者都超出系統定義的長度上限。

sourceFileNamedestFileName 指定的路徑無效 (例如,它位於未對應的磁碟機上)。

找不到 sourceFileName

destFileName 存在,且 overwritefalse

-或-

發生 I/O 錯誤。

sourceFileNamedestFileName 格式無效。

範例

下列範例會將檔案複製到 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

備註

sourceFileNamedestFileName 參數可以指定相對或絕對路徑資訊。 相對路徑資訊會解譯為相對於目前的工作目錄。 這個方法不支持參數中的通配符。

源檔的屬性會保留在複製的檔案中。

如需一般 I/O 工作的清單,請參閱 一般 I/O 工作

另請參閱

適用於

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

目的地檔案的名稱。 這不可以是目錄或現有檔案。

例外狀況

呼叫端沒有必要的權限。

sourceFileNamedestFileName 為零長度字串,只包含空格或包含一或多個無效字元。 您可以使用 GetInvalidPathChars() 方法查詢無效字元。

-或-

sourceFileNamedestFileName 會指定目錄。

sourceFileNamedestFileNamenull

指定的路徑、檔案名稱,或兩者都超出系統定義的長度上限。

sourceFileNamedestFileName 指定的路徑無效 (例如,它位於未對應的磁碟機上)。

找不到 sourceFileName

destFileName 存在。

-或-

發生 I/O 錯誤。

sourceFileNamedestFileName 格式無效。

範例

下列範例會將檔案複製到 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

sourceFileNamedestFileName 參數可以指定相對或絕對路徑資訊。 相對路徑資訊會解譯為相對於目前的工作目錄。 若要取得目前的工作目錄,請參閱 Directory.GetCurrentDirectory 方法。 這個方法不支持參數中的通配符。

源檔的屬性會保留在複製的檔案中。

另請參閱

適用於